백준 & 프로그래머스
백준.소수&팰린드롬.py
concho
2023. 9. 10. 23:04
https://www.acmicpc.net/problem/1747
1747번: 소수&팰린드롬
어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다. 어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고,
www.acmicpc.net
# 풀이 설계
# 1) num가 팰린드롬 수 인지 판단하는 함수 하나를 먼저 만든다.
# 2) 에라토스테네스의 체 알고리즘 함수를 하나 만든다.
# 3) 적절한 max값을 잡고 에라토스테네스의 체를 수행한 후 팰린드롬 수 인지 검사한다.
import math
def palindrome(num):
num_str = str(num)
for ch_re, ch in zip(reversed(num_str), num_str):
if ch != ch_re:
return False
return True
def eratos(n, m_n):
origin_n = n
n = m_n
eratos_table = [True for _ in range(n)]
m = int(math.sqrt(n))
for i in range(2, m + 1):
if eratos_table[i] == True:
for j in range(i+i, n, i):
eratos_table[j] = False
return [i for i in range(origin_n,n) if eratos_table[i] == True]
if __name__ == "__main__":
N = int(input())
N = 2 if N == 1 else N
max_n = N*2+10000 if N < 98689 else 1003002 # 적절한 max설정
prime_num = eratos(N, max_n)
for num in prime_num:
if palindrome(num) == True:
print(num)
break