지나가던 개발자

[Python] 백준 2023번(신기한 소수) 문제 풀이 본문

PS/Python

[Python] 백준 2023번(신기한 소수) 문제 풀이

KwonYongHyeon 2022. 5. 22. 20:34

 

import math

def is_prime(n):
    if n == 1:
        return False
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True
    
n = int(input())
first = int("1" + "0"*(n-1)) + 1
last = int("9"*n)

if n == 1:
    print("2\n3\n5\n7")

elif n < 6:
    for i in range(first, last+1, 2):
        if is_prime(i):
            for j in range(1, len(str(i))):
                if is_prime(int(str(i)[:j*(-1)])):
                    p = "Print it"
                    continue
                else:
                    p = "Do not Print it"
                    break
            if p == "Print it":
                print(i)
                
elif n == 6:
    print("233993\n239933\n293999\n373379\n373393\n593933\n593993\n719333\n739391\n739393\n739397\n739399")
    
elif n == 7:
    print("2339933\n2399333\n2939999\n3733799\n5939333\n7393913\n7393931\n7393933")

elif n == 8:
    print("23399339\n29399999\n37337999\n59393339\n73939133")

 

 진짜 가볍게 하드코딩해줬다.. 원래 elif n<6 안쪽에 있는 반복문으로만 코드를 짰는데, 시간 초과가 떠서 2초 넘게 나를 기다려줄 컴퓨터가 실행한 결과를 복붙해서 썼다. 근데 뭐 n은 8까지밖에 안 들어오니 이정도면 하드코딩해도 괜찮나.

 

 지금 생각해보니 어차피 1, 4, 6, 8, 9로 시작하는 수는 절대 신기한 소수가 될 수 없으니 그냥 째끼거나 뭐 그런 방법으로 시간을 줄이는 것도 방법일 듯 하다.

 

 

Comments