반응형
문제 설명
입출력 예제
풀이 코드
연속된 소수의 합을 구하기 위해서는 에라토스테네스의 체를 이용해 N까지의 소수를 구하고,
구한 소수 배열을 바탕으로 투 포인터를 활용해 연속된 소수의 합이 N이 되는지를 확인하여 정답을 구할 수 있다.
에라토스테네스의 체와 투 포인터에 대한 설명은 아래 링크에서 참고할 수 있다.
[알고리즘] 투 포인터(Two Pointers)란?
투 포인터(Two Pointers) 투 포인터는 말 그대로 두 개의 포인터를 사용하여 문자열, 배열, List에서 원하는 값을 찾는 것 입니다. 투 포인터를 활용하기 위한 조건은 주어진 배열에서 연속된(정렬이
hstory0208.tistory.com
[Java/자바] 프로그래머스 - 소수 찾기 (에라토스테네스의 체)
문제 설명 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조
hstory0208.tistory.com
정답 코드
import sys
input = sys.stdin.readline
N = int(input())
# 소수 배열
primes = [True] * (N + 1)
# 0과 1은 소수가 아니므로 False
primes[0] = False
primes[1] = False
# 소수 구하기 (에라토스테네스의 체 알고리즘)
for i in range(2, int(N ** 0.5) + 1):
if primes[i]:
for j in range(i + i, N + 1, i):
primes[j] = False
# 소수 여부 boolean을 숫자로 초기화
primes = [i for i in range(2, N+1) if primes[i]]
# 투 포인터
start = 0
end = 0
total = 0
cnt = 0
while True:
if total == N:
cnt += 1
if total > N:
total -= primes[start]
start += 1
elif end == len(primes):
break
else:
total += primes[end]
end += 1
print(cnt)
'◼ 코딩테스트 > 투포인터 (Two Pointer)' 카테고리의 다른 글
[Python/파이썬] 백준 1806번 - 부분합 (0) | 2023.07.19 |
---|