baekjoon 9020

윤동환·2023년 1월 6일
0

Algorithm

목록 보기
28/54
post-thumbnail

골드바흐의 추측

내가 작성한 코드

def isSosu(n):
    if n != 1:
        for a in range(2, n + 1):
            if n % a == 0 and a != n:
                return False
            elif a == n:
                return True
T = int(input())
for t in range(T):
    N = int(input())
    pibot = N // 2
    for p in range(N):
        if isSosu(pibot) == True and (isSosu(N - pibot)) == True:
            print(pibot, N - pibot)
            break
        else:
            pibot -= 1

문제를 풀며 고려한 사항

  • 이 문제는 두개의 소수를 더하여 주어진 수가 되고, 그 두개의 수의 차이가 가장 적은 소수 2개를 구하는 것이었다. 그래서 기존에 여러 소수를 구하는 방식이 아닌 원하는 소수를 빠르게 찾을 필요가 있었다.
    이를 위해서 주어진 수를 2로 나누어 pibot을 정하고 pibot 부터 조건을 만족하는 소수를 찾았다.
  • while True로 하려다가 무한루프 조건은 피하고 싶어서 아래의 코드의 for문 조건을 N으로 두어 최대 범위로 정하였다.
   for p in range(N):
        if isSosu(pibot) == True and (isSosu(N - pibot)) == True:
            print(pibot, N - pibot)
            break
        else:
            pibot -= 1
  • pibot = N / 2로 하였더니 isSosu함수 내에 들어가는 수가 float가 되어 range 조건에서 type error가 발생하여 //로 나누어주었다.

    결과

profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글