문제 : https://www.acmicpc.net/problem/1747
N = int(input())
# 에라토스테네스의 체
def asieve(N):
sieve = [False, False] + ([True] * (N-1))
limit = int(N ** 0.5)
for i in range(2, limit+1):
if sieve[i] :
for j in range(i*2, N+1, i):
sieve[j] = False
return [i for i in range(2, N+1) if sieve[i]]
# 팰린드롬
def pellin(li):
result = []
for i in li:
if int(str(i)[::-1]) == i:
result.append(i)
return result
selection = asieve(1000000)
selection = pellin(selection)
res = 0
for i in selection:
if i >= N:
res = i
break
if res == 0:
res = 1003001
print(res)
에라토스테네스 체 복습하는 느낌으로 나쁘지 않았지만 진짜 개같은 문제였다
n의 범위는 입력값의 범위지 출력값의 범위가 아니기 때문에 n이 특정 수를 넘어간다면 백만 이내의 수에서 소수이면서 팰린드롬인 수가 나오지 않는다 따라서 그럴 경우에 백만을 넘어가지만 가장 작은 소수이면서 팰린드롬인 수 1003001이 출력되도록 해야한다.
int(str(i)[::-1]) == i
: 숫자 뒤집을 때 슬라이싱 활용하는거 까먹지 않기!