티스토리 뷰

알고리즘은 꾸준히 풀었는데 글 업로드를 안 했다...정말이다..정말 열심히 풀었다..

 

어쨌든 낮은 난이도에 비해 배울 점이 많은 문제라서 이렇게 기록을 남기게 되었다.

 

www.acmicpc.net/problem/17103

 

17103번: 골드바흐 파티션

첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다.

www.acmicpc.net

 

기본 아이디어

  • 두 소수의 합으로 짝수를 이루는 과정에서 각 수에 대해 소수이지 확인하는 절차가 필요하다.
  • 입력이 첫째줄에 테스트 케이스의 수가 주어지고 그 수 만큼 테스트 케이스가 주어지는 구조이다.
  • 각 수에 대해 소수인지 체크한 리스트를 한 번만 만들어놓으면 여러 테스트 케이스에서 공용으로 사용할 수 있다.
  • 소수인지 확인하는 과정에서도 에라토스테네스의 체를 활용한다. 참고) wikidocs.net/21638
 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

  • 2보다 큰 짝수 num은 num = i + (num - i) 로 나타낼 수 있고 i랑 (num - i)가 둘 다 소수인지만 증명하면 골드바흐의 추측에 해당한다.
def get_primary_list(n):
    array = [1 for _ in range(n+1)]

    for i in range(2, int(n ** 0.5) + 1):
        if array[i]:
            j = 2

        while i * j <= n:
            array[i * j] = 0
            j += 1

    return array

T = int(input())
nums = [int(input()) for _ in range(T)]
max_num = max(nums)
primarys = get_primary_list(max_num)

for num in nums:
    result = 0

    for i in range(2, num // 2 + 1):
        if primarys[i] and primarys[num - i]:
            result += 1

    print(result)

유의사항

  • 여러 테스트 케이스가 주어지는 경우 공용으로 사용할만한 코드가 있다면 반복문 바깥으로 빼서 활용하면 시간을 많이 줄일 수 있다.
  • 소수를 구하는 로직이 필요하다면 에라토스테네스를 활용하자.
반응형

'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글

[python] boj 2012 등수 매기기  (0) 2021.04.29
[python] boj 10422 괄호  (0) 2021.04.18
7569번: 토마토  (0) 2020.10.23
7576번: 토마토  (0) 2020.10.22
1012번: 유기농 배추 (python)  (0) 2020.10.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함