본문 바로가기

코딩테스트(python)/백준

백준 9020번 파이썬

반응형

1. 문제

2. 설명

역시나 이 문제도 타임아웃과의 싸움이였다. 

1. 차이가 가장 적으려면 출발점을 반절 값에서 시작한다.
2. 반절값부터 한쪽은 1씩 줄어들고, 한쪽은 1씩 늘어나면서 그 값들이 소수인지 판별한다.

3. 코드

정답 코드

from sys import stdin

T=int(stdin.readline()) 

def prime(number):
    if number<2:
        return False

    for j in range(2,int(number**0.5)+1):
        if number%j==0:
            return False

    return True

for i in range(T): 
    n=int(stdin.readline()) 

    a=int(n/2) 
    b=int(n/2) 

    for k in range(int(n/2)):
        if prime(a)and prime(b): 
            print(a,b)
            break
        else: 
            a=a-1
            b=b+1

내가 작성한 코드

import math
import sys

def IsPrime(num):
    a = int(math.sqrt(num))
    if num == 1:
        return False
    else:
        for i in range(2, a+1):
            if num % i == 0:
                return False
        return True

Num_list = list(range(2,10000))
Sort_list = []
for i in Num_list:
    if IsPrime(i):
         Sort_list.append(i)

t = int(sys.stdin.readline())
for i in range (0,t):
    n = int(sys.stdin.readline())
    first = 0; second = 0; minus = 10000;
    for k in Sort_list:
        for j in Sort_list:
            if k+j == n and j-k < minus and j-k > 0:
                first = k; second = j
                break
    print(first,' ',second)

배열을 만들어주고 for문을 돌리니 따져야할 것이 많아져 타임아웃이 나왔던 것 같다.

반응형

'코딩테스트(python) > 백준' 카테고리의 다른 글

백준 10870번 파이썬  (0) 2022.09.05
백준 10872번 파이썬  (0) 2022.09.05
백준 4938번 파이썬  (0) 2022.09.02
백준 1929번 파이썬  (0) 2022.09.02
백준 11653번 파이썬  (0) 2022.08.30