2023번: 신기한 소수
수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다. 7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수
www.acmicpc.net
원래 8자리로 10 ** 8 짜리 리스트로 에라토스테네스의 체를 사용해 미리 소수 0, 1 테이블을 만들어놓으려고 했는데,
메모리를 보니 4mb로 매우 작아서
- 백트래킹(Backtracking)으로 재귀로 들어오는 temp 값의 소수여부를 확인해 가지치기했다.
- 출력되는 소수값을 자세히 보면
- 맨 앞자리 수는 2, 3, 5, 7만 올 수 있고
- 2~N자리 수까지는 1, 3, 7, 9만 올 수 있어서 이를 반영했다.
파이썬 코드는 다음과 같다.
def dfs(depth, temp):
# 소수 가지치기. 이 때, 제곱근까지의 값만 나누어 나머지의 여부를 보면 된다!
for p in range(2, int(int(temp)**0.5)+1):
if not int(temp) % p:
return
# 자릿수 끝에 다다랐을 때 출력
if depth == n:
print(temp)
return
for i in "1379":
dfs(depth+1, temp+i)
n = int(input())
for s in "2357":
solve(1, s)
- 고찰 : 어렵지 않은 백트래킹 문제였다. Backtracking / DFS 문제 계속 많이 풀자. 화이팅.
'Problem Solving > boj' 카테고리의 다른 글
[BOJ] 1063. 킹(Python) / Simulation (0) | 2021.03.09 |
---|---|
[BOJ] 9466. 텀 프로젝트(Python) / DFS (0) | 2021.03.09 |
[BOJ] 2661. 좋은 수열(Python) / Backtracking (0) | 2021.03.07 |
[BOJ] 11053. 가장 긴 증가하는 부분 수열(Python) / DP (0) | 2021.03.04 |
[BOJ] 1759. 암호 만들기(Python) / DFS (0) | 2021.03.04 |