algorithm/baekjoon

[백준] 9020번 골드바흐의 추측 (파이썬)

support_u 2023. 2. 9. 15:24

풀이

# 시간오류를 막기위해 먼저 리스트로 묶음
sosu = []
for i in range(2, 10000):
    for j in range(2, int(i**0.5)+1):
        if i % j == 0:
            break
    else:
        sosu.append(i)

for _ in range(int(input())):
    n = int(input())

    # n을 절반으로 나눔
    for i in range(len(sosu)):
        if n // 2 == sosu[i]:
            break
        if n // 2 < sosu[i]:
            i -= 1
            break

    # 범위를 넣을려면 for이 while보다 편할 것같아서 break 나올 수 있는 변수를 넣음
       stop = 0   
     # 중간부터 작아지는 수
     for num_1 in sosu[i :  : -1]:
         # 이미 수가 나왔다면 스탑
        if stop > 0:
            break
        # 중간부터 커지는 수
        for num_2 in sosu[i : ]:
            if n == num_1 + num_2:
                print(num_1, num_2)
                stop = 1
                break

아쉬운점

  • n // 2는 몫만 나오니까 작을 경우는 필요가 없었다
  • stop으로 저렇게 나올려면 while 이 편했을것 같다는 생각이 들었다.