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, 또 다른 한 값은 +1
3-1. 두 값이 소수라면 두 값을 출력
3-2. 두 값이 소수가 아니라면, 3. 반복