[Python] 1990 소수인팰린드롬

2026. 1. 14. 23:54·Coding-Test/백준
728x90
반응형

[Gold V] 소수인팰린드롬 - 1990 

[문제 링크](https://www.acmicpc.net/problem/1990) 


💻 문제 정의

팰린드롬수란 151, 11 처럼 숫자를 앞에서 부터 읽은 것과 뒤에서 부터 읽은 것이 같은 수이다. 정수의 범위가 주어졌을 때, 소수이면서 동시에 팰린드롬인 수를 출력하는 문제이다.

💡 접근 및 설계

소수 판별 그리고 팰린드롬 판별 두 개의 로직이 필요하다. 소수 판별 알고리즘으로는 정석적인 풀이와 에라토스테네스의 체 기법을 활용하는 풀이, 두 가지 방법이 있다.

팰린드롬 판별은 문자열 뒤집기를 활용하였다.

✏️ 알고리즘 풀이

# 아마도 정석 소수 판별
def isPrime(n):
    if n == 1:
        return False
    if n == 2:
        return True
    elif n >= 3:
        for i in range(2, n):
            if n % i == 0:
                return False
    return True

# 에라토스테네스의 체 - 최적화
def isPrime(n):
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True

처음에는 정석 소수 판별 기법으로 문제를 접근하였으나, 역시나 시간초과가 발생하였다. 이후 소수 판별 함수를 에라토스테네스 체 기법으로 작성하였다.

isPalindrome = []
for i in range(a, b+1):
    if str(i) == str(i)[::-1]:
        isPalindrome.append(i)

팰린드롬 판별 방식은 다음과 같다. 문자열 뒤집기를 활용하여 팰린드롬을 판별하였다.

for p in isPalindrome:
    if isPrime(p):
        print(p)

이제 팰린드롬이면서 소수인 수를 출력하면 되나, 무슨일인지 자꾸만 시간 초과가 걸렸다. 해당 문제에 대해 원인을 알아보니..

if b > 10_000_000:
    b = 10_000_000

바로 다음과 같은 조건이 필요하였다.

팰린드롬 수 중에서 짝수 자리, 즉 1221, 145541 등과 같이 자릿수가 짝수이면 소수를 만족하지 않는다.(11의 배수). 따라서 천만 ~ 억 사이의 숫자들은 자릿수가 8자리이기 때문에 천만 이상의 수들은 판별 대상에서 제외하여도 무방하다.

🗒️ 최종 제출 코드

# 1990 소수인 팰린드롬

import math

def isPrime(n):
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True

a, b = map(int, input().split())

if b > 10_000_000:
    b = 10_000_000

isPalindrome = []
for i in range(a, b+1):
    if str(i) == str(i)[::-1]:
        isPalindrome.append(i)
# isPalindrome = [n for n in range(a,b+1)if str(n)==str(n)[::-1]]

for p in isPalindrome:
    if isPrime(p):
        print(p)
print(-1)

💭 오늘의 회고

골드 5 문제임에도 불구하고 정말 많은 생각을 요구하는 문제였다. 소수 판별 함수부터 팰린드롬 판별, 그리고 그 두개를 결합하였을때 발생하는 예외까지. 3박자를 갖춰야 하는 문제였다.

728x90
반응형
저작자표시 (새창열림)

'Coding-Test > 백준' 카테고리의 다른 글

[Python] 1738 골목길  (1) 2026.01.16
[Python] 2248 이진수 찾기  (0) 2026.01.15
[Python] 15900 나무 탈출  (0) 2026.01.10
[Python] 4375 1  (0) 2026.01.09
[Python] 3687 성냥개비  (0) 2026.01.09
'Coding-Test/백준' 카테고리의 다른 글
  • [Python] 1738 골목길
  • [Python] 2248 이진수 찾기
  • [Python] 15900 나무 탈출
  • [Python] 4375 1
희완
희완
희완한 코딩일상
    반응형
  • 희완
    Code-Heewan
    희완
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Python
        • 가상환경
      • Algorithm
      • Coding-Test
        • 백준
        • 프로그래머스
        • 항해99
      • Data-Analysis
      • 웹 개발
        • django
      • AWS
      • 공모전
      • Mobile
  • 링크

    • Github
  • 300x250
  • hELLO· Designed By정상우.v4.10.3
희완
[Python] 1990 소수인팰린드롬
상단으로

티스토리툴바