김범주·2022년 7월 25일
0

백준 파이썬

목록 보기
24/29
post-thumbnail
def prime(x):
  if x == 1:
    return False
  for i in range(2, int(x**0.5) + 1):
    if x % i == 0:
      return False
  return True 

T = int(input())
prime_list = []


for i in range(2, 10001):
  if prime(i) == True:
    prime_list.append(i)

for i in range(T):
  case = int(input())
  case_list = []
  ans = []
  for i in range(case):
    if i in prime_list:
      case_list.append(i)
  for j in case_list:
    if (case - j) in case_list:
      ans.append([j, case-j])
  if len(ans) % 2 == 0:  
    middle = len(ans) // 2
  else:
    middle = len(ans) // 2 + 1  
  print(ans[middle-1][0], ans[middle-1][1])

예시 출력은 잘 되었으나 시간초과...

정답

def prime(x):
  if x == 1:
    return False
  for i in range(2, int(x**0.5) + 1):
    if x % i == 0:
      return False
  return True 

T = int(input())

for i in range(T):
  case = int(input())
  a, b = case//2, case//2
  while a > 0:
    if prime(a) == True and prime(b) == True:
      print(a, b)
      break
    else:
      a -= 1
      b += 1  

처음에 반으로 나눠서 +-1씩 해주는 방법을 생각했다가 안했는데 다시 생각해보니 그 방법이 맞았었다...

profile
개발꿈나무

0개의 댓글