지나가던 개발자
[Python] 백준 2023번(신기한 소수) 문제 풀이 본문
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로 시작하는 수는 절대 신기한 소수가 될 수 없으니 그냥 째끼거나 뭐 그런 방법으로 시간을 줄이는 것도 방법일 듯 하다.
'PS > Python' 카테고리의 다른 글
[Python] 백준 1763번(듣보잡) 문제 풀이 (0) | 2022.05.28 |
---|---|
[Python] 백준 1747번(소수&팰린드롬) 문제 풀이 (0) | 2022.05.22 |
[Python] 백준 1990번(소수인팰린드롬) 문제 풀이 (0) | 2022.05.21 |
[Python] 백준 1225번(이상한 곱셈) 문제 풀이 (0) | 2022.05.19 |
[Python] 백준 1850번(최대공약수) 문제 풀이 (0) | 2022.05.18 |
Comments