알고리즘/BOJ

[백준] 1747_소수&팰린드롬

엉아_ 2021. 9. 24. 17:18
728x90

📕 문제

어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다.

어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고, 소수이면서 팰린드롬인 수 중에서, 가장 작은 수를 구하는 프로그램을 작성하시오.

 

[입력]

첫째 줄에 N이 주어진다.

 

[출력]

첫째 줄에 조건을 만족하는 수를 출력한다.

 

💡 풀이법

1. 소수인지 판별하는 함수를 만든다.

2. 회문인지 판별하느 함수를 만든다.

3. 주어진 수 N부터 1씩 수를 키우는 while문들 돌면서 둘을 모두 만족할때 브레이크 한다.

 

def palindrome(n):
    n = str(n)
    if n == n[::-1]:
        return True
    return False

def prime(n):
    m = int(n**0.5)
    for i in range(2, m+1):
        if n % i == 0:
            return False
    return True

N = int(input())
n = N
while True:
    if n == 1:
        print(2)
        break
    elif n == 2:
        print(n)
        break
    elif n % 2 and prime(n) and palindrome(n):
        print(n)
        break
    n += 1