[알고리즘/백준] 1644번 : 소수의 연속합(python)

유현민·2022년 5월 13일
0

알고리즘

목록 보기
183/253

에라토스테네스의 체와 투포인터를 이용하여 풀었다.
처음에 소수들을 리스트에 저장하고 투 포인터로 인덱스를 옮겨가면 합을 구했다.

import math


def isprime():
    prime_number = []
    array = [True for _ in range(N + 1)]

    for i in range(2, int(math.sqrt(N)) + 1):
        if array[i]:
            j = 2

            while i * j <= N:
                array[i * j] = False
                j += 1

    for num in range(2, N + 1):
        if array[num]:
            prime_number.append(num)

    return prime_number


def two_pointer():
    global ans
    s, e = 0, 0
    l = len(prime)
    s_n = 0
    while s < l:
        if s_n == N:
            s_n -= prime[s]
            s += 1
            ans += 1
        elif e == l:
            s_n -= prime[s]
            s += 1
        elif s_n > N:
            s_n -= prime[s]
            s += 1
        elif s_n < N:
            s_n += prime[e]
            e += 1


N = int(input())
ans = 0
prime = isprime()
two_pointer()
print(ans)
profile
smilegate megaport infra

0개의 댓글