1747 : 소수&팰린드롬

서희찬·2021년 9월 27일
0

백준

목록 보기
48/105

문제

코드


import math 

#prime func
def primeNumber(x):
    for i in range(2,int(math.sqrt(x))+1):
        if x % i ==0:
            return False 
    return True #소수당 

n = int(input())

max = 1000001 
cnt =0 

for i in range(n,max):
    if i == 1:
        continue
    if str(i)==str(i)[::-1]: #펠
        if primeNumber(i) :
            cnt = i 
            break 

if cnt == 0 :
    cnt = 1003001 
print(cnt)

해설

펠린드롬과 소수를 모두 고려해줘야 하는 문제이다.
알고리즘 분류에 에라토스테네스의 체를 쓰는것도 포함됐으나 생각해보니 굳이 그럴필요가 없을거 같아 소수 판별 함수를 작성했다.

그 이유는 !

처음에 생각한 방식이 에라토스테네스의 체를 활용하여 모든 소수를 구한 후 그 소수 중 펠린을 만족하는 값을 구하는 것이였는데 그렇게 하면 굳이 구할필요가 없는 소수도 구해야하는 과정을 거쳐야하기에 시간이 더 많이 걸릴거 같았다 !
그래서 생각의 방향을 바 꿨다!

str(i)==str(i)[::-1]

이 방법을 활용하여 펠린드롬을 먼저 체크하고 그 펠린드롬이 소수인지 확인하고 맞다면 출력하면된다 !
그 이유는 펠린드롬이고 소수인것중 n이상의 값중 제일 최솟값을 출력하면 되기 때문이다

그런데 !
[::-1]은 이번에 처음 봤다 ! 이것이 무엇일까?

[::-1]

[start:stop:step] 이다!
-1스텝씩 출력하는것이니 마지막부터 출력한다고 생각하면된다 !
그러므로
arr = '1234' 라면
arr[::-1] = '4321'이 된다 !

그리고 cnt==0일경우를 생각해줘야하고
i가1일경우 continue 를 써주지 않다면 1을 입력했을때 2가 아닌 1이 출력이 된다.

math.sqrt(x)

math내장 함수 sqrt로 제곱근을 반환한다.

다음 포스트에 소수알고리즘을 간단히 소개하겠다.

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글