[알고리즘][파이썬] 백준 1747번 - 소수&팰린드롬

한상진·2021년 4월 15일
0

알고리즘

목록 보기
2/6


처음 떠올렸던 접근 방법

  1. 소수 판별 함수를 생성한다.
  2. 입력된 수 N~최대값 까지 순회하며 팰림드롬 수를 찾는다.
  3. 팰림드롬 수를 찾게 되면, 소수인지 판별한다.
  4. 팰림드롬 수이면서 소수이면 출력 후 종료한다.

처음에 팰림드롬 수를 어떻게 판별할지 생각을 오래 했는데, 그냥 '리스트 슬라이싱'을 활용하면 됐다.

또한 소수 판별에 '에라토스테네스의 체'를 사용할지 고민을 해봤는데, 소수를 무조건 다 찾을 필요 없이 팰림드롬 수일 경우에만 검사를 하면 되기 때문에 에라토스테네스의 체보다 간략하게 소수판별 함수를 구성했다.


최종 입력 코드

import math

def isPrime(x): # 소수인지 판별해주는 함수
    for i in range(2, int(math.sqrt(x)+1)):
        if x % i == 0:
            return False
    return True

N = int(input())
result = 0

for i in range(N, 1000001): # 입력값 N 부터 최대값 까지 순환
    if i == 1: # 1은 소수가 아니기 때문에 예외처리
        continue
    if str(i) == str(i)[::-1]: # 팰림드롬 수 일 경우
        if isPrime(i) == True: # 소수 판별 함수 적용
            result = i
            break

if result == 0: # 입력값이 만약 최대 값 100만일 경우
    result = 1003001 # 100만 이상이면서 팰림드롬 및 소수일 경우를 적용

print(result)

코드를 다 작성하고 제출을 했는데 오답처리가 나길래 다시 한번 확인해보니, 입력값이 최대 값인 100만일 경우를 고려해주지 못해서 발생한 오답처리였다.
따라서 맨 마지막에 최대 값이 100만일 경우를 예외처리 해주는 코드를 추가했다.


문제를 풀 때 수의 범위와 예외적으로 고려해주어야할 사항을 잘 확인해야겠다.

profile
공부방

0개의 댓글