티스토리 뷰

 

🚀접근하기

소수와 팰린드롬 두가지 경우를 모두 만족해야 하는 문제이다.

소수 여부를 구하는 것은 지금까지 많이 해왔던 에라토스테네스의 체를 이용하면 되고,

팰린드롬 여부를 구하는 것을 단순히 reversed로 문자열을 뒤집어주고, int로 감싸주어 다시 정수형을 반환해주는 방법을 생각하였다.

🎉코드

❗️틀렸습니다❗️

import sys

n=1000001
array=[True]*n

for i in range(2, int(n ** 0.5)+1):
    if array[i]:
        for j in range(i*2, n, i):
            array[j] = False

N = int(sys.stdin.readline())

for i in range(N, n):
    num=int(''.join(reversed(str(i))))
    if array[i] and i == num:
        break
    else:
        continue

print(i)

 

먼저, 에라토스테네스의 체를 이용하여 소수인 것들을 걸러주었다.  i를 2부터 1씩 증가하면서 i의 배수들은 다 False로 값을 주었다. (어떤 수의 배수들은 소수가 될 수 없으므로) 

그 후에 이제 입력값 N을 받아 N부터 1000000까지 반복문을 돌면서

num=int(''.join(reversed(str(i)))) 을 써줘서 숫자를 거꾸로 뒤집어 주었고, 그 다음 if문을 써주어 팰린드롬과 소수의 여부를 확인해주었다. 두 조건을 모두 만족해야지만 그 수가 원하는 값이 되어 break로 빠져나오게 되는 것이다. 그렇지 않을 경우엔 조건을 만족할 때까지 계속해서 반복문을 돌려준다.

 

근데...! 이렇게 코드를 제출했더니 ❗️틀렸습니다❗️가 떴다.. 

 

그 이유는 

1) i=1인 경우와 , 2) i=1000000인 경우를 조건에 넣어주지 않았기 때문이다.

 

❗️맞았습니다❗️

import sys

n=1000001
array=[True]*n

for i in range(2, int(n ** 0.5)+1):
    if array[i]:
        for j in range(i*2, n, i):
            array[j] = False

N = int(sys.stdin.readline())

for i in range(N, n):
    num=int(''.join(reversed(str(i))))
    if i == 1:
        continue
    if i == 1000000:
        i = 1003001
        break
    if array[i] and i == num:
        break
    else:
        continue

print(i)

 

따라서 1) 경우엔 continue를 사용하여 계속해서 반복문을 돌려주게 하였고, 2)인 경우엔 1000000 크거나 같은 수 중에 소수이면서 팰린드롬인 수인 1003001을 출력해주도록 하였다.

 

💪다짐

다시 한 번 더 에라토스테네스의 체를 복습할 수 있었던 좋은 기회였던 것 같고, 모든 경우의 수(ex. 이번 문제처럼 i = 1인 경우와 i = 1000000인 경우)를 빠뜨리지 않고 조건문을 잘 써야겠다는 다짐을 하게 되었던 문제였다!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함