백준 9020 골드바흐의 추측

Hyun·2022년 9월 8일
0

코딩테스트

목록 보기
3/66

https://www.acmicpc.net/problem/9020


실패 이유 : 시간 초과

prime_list = []

for num in range(2, 10001):
    prime_check = True

    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            prime_check = False
            break

    if prime_check:
        prime_list.append(num)

test_case = int(input())
for _ in range(test_case):
    N = int(input())

    small_num, big_num = N//2, N//2				# 입력으로 받은 짝수를 반으로 나눈다

    while True:						# 작은 값엔 -1 , 큰 값엔 +1 을 반복하며 두 값이 모두 소수인지 체크한다
        if small_num in prime_list and big_num in prime_list:
            print(small_num, big_num)
            break
        small_num -= 1
        big_num += 1

소수를 범위내에 체크했다 하더라도 무작정 이중 for문을 돌려 작은 차이를 가진 두 소수를 찾아내면 시간초과가 발생한다.

  1. 입력받은 값을 반으로 나눈다
  2. 반으로 나눈 두 값이 소수인지 체크한다.
  3. 만약 두 값이 소수가 아니라면, 한 값은 -1, 또 다른 한 값은 +1
    3-1. 두 값이 소수라면 두 값을 출력
    3-2. 두 값이 소수가 아니라면, 3. 반복

0개의 댓글

관련 채용 정보