[백준] 2023 - 신기한 소수 (백트레킹)

김영민·2024년 7월 19일
0

코딩테스트

목록 보기
10/32


코드

import sys
import math

sys.setrecursionlimit(10**6)

N = int(input())

num_dict = {i:False for i in range(0,10)}


unique_list = []

def DFS(num):

    if len(str(num)) == N:

        unique_list.append(num)
        return

    for i in ([1,2,3,5,7,9]):
        temp_num = int(str(num)+str(i))
        
        cnt = 0
        for j in range(1,int(math.sqrt(temp_num))+1):
            if temp_num%j == 0:
                cnt +=1
        if cnt > 1:
            continue
        else:
            DFS(temp_num)

first_num = [2,3,5,7]

for num in first_num:
    DFS(num)

for n in unique_list:
    print(n)

리뷰

  • 간단한 문제로 생각 됨.
  • 소수를 찾는 방법
    - 해당 수가 해당 수의 제곱근까지 나눴을 때 나누어 떨어지는 값이 1개이면 소수.
    • for 문에 int(math.sqrt(temp_num))+1 를 통해 계산.
    • str 를 통해 숫자의 자릿수 계산하고 문제에서 요구하는 N 값과 동일하면 반환.

0개의 댓글