본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 2023번: 신기한 소수 -Python

728x90

[백준알고리즘] 2023번: 신기한 소수 -Python

https://www.acmicpc.net/problem/2023

 

2023번: 신기한 소수

수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다. 7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수이고, 7도 소수이다. 즉, 왼쪽부터 1자리, 2자리, 3자리, 4자리 수 모두 소수이다! 수빈이는 이런 숫자를 신기한 소수라고 이름 붙였다. 수빈이는 N자리의 숫자 중에서 어떤 수들이 신기한 소수인지 궁금해졌다. N이 주어졌을 때, 수빈이를 위해 N자리

www.acmicpc.net

처음에는 에라토스테네스의 체를 이용해서 10**8만큼의 리스트를 만들었었다.

만들고 보니 10**8만큼을 미리 검사하느라 시간이 굉장히 오래 걸렸었다.

 

그래도 정상동 작은 해서 제출을 했더니 메모리 초과가 떴다. 낼 때도 그냥 내봤던 거라 메모리 초과를 보고메모리 제한을 보니 4MB밖에 안 주어졌다.

 

그래서 어쩔 수 없이 소수 판별하는 방법으로 바꾸었다. 수를 만들어보고 제곱근까지 나눠서 나눠 떨어트리는 수가 존재하면 해당 수는 소수가 아니게 되는 성질을 이용했다.

여기서는 제곱근까지의 모든 수를 사용했지만 제곱근까지의 모든 '소수'만 나눠보면 된다.

 

def find(num):
    for i in range(2, int(int(num)**0.5)+1):
        if int(num) % i == 0:
            return
            
    if len(num) == n:
        print(num)
        return

    for p in prime:
        find(num+p)
    
n = int(input())
start = ['2', '3', '5', '7']
prime = ['1', '3', '7', '9']
for s in start:
    find(s)

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90