백준 2023 파이썬 DFS 재귀함수
2024. 5. 14. 06:50ㆍ코딩 도구/백준
반응형
백준 2023 - 신기한 소수
문제
https://www.acmicpc.net/problem/2023
답안 코드 :
import sys
sys.setrecursionlimit(10000)
input = sys.stdin.readline
N = int(input())
def isPrime(num):
for i in range(2, int(num / 2 + 1)):
if num % i == 0:
return False
return True
def DFS(number):
if len(str(number)) == N:
print(number)
else:
for i in range(1, 10):
if i % 2 == 0: # 짝수라면 더 이상 탐색 불필요
continue
if isPrime(number * 10 + i): # 소수이면 자릿수 늘림
DFS(number * 10 + i)
# 일의 자리 소수는 2, 3, 5, 7이므로 4가지 수 에서만 시작
DFS(2)
DFS(3)
DFS(5)
DFS(7)
생각 :
# 문제 분석
# DFS는 재귀함수 형태
# 재귀 함수에 자릿수 개념을 붙여서 구현해보자
# (?) 문제 조건에 맞도록 가지치기도
# 문제 풀이
# 소수란
# 수의 약수가 1과 자기 자신인 수
# 자릿수가 한 개인 소수 : 2 3 5 7
# 4 6 8 9를 제외한 가지치기 방식 적용
# 이어서 자릿수가 두 개인 현재수 * 10 + a를 계산
# 그래서 이게 소수라면 재귀 함수로 자릿수를 하나 늘린다.
# 단 a 가 짝수인 경우는 항상 2를 약수로 가지니까 가지치기로 a가 짝수인 경우 제외
# 이런 방식으로 자릿수를 N까지 확장했을 때 그 값이 소수면 출력해버리자
# 풀이 사진
탐색 알고리즘 정리 블로그
반응형
'코딩 도구 > 백준' 카테고리의 다른 글
백준 1260 파이썬 DFS와 BFS를 구현할 수 있는가 (25) | 2024.05.16 |
---|---|
백준 13023 파이썬 DFS의 시간 복잡도 O(V+E) (1) | 2024.05.15 |
백준 11724 파이썬 sys.setrecursionlimit() (1) | 2024.05.13 |
백준 10989 파이썬 기수정렬 계수정렬 (32) | 2024.02.24 |
백준 1517 파이썬 병합정렬 손풀이 플레티넘 (44) | 2024.02.22 |