완전탐색 - 소수 찾기 (Level 2)

jisu_log·2025년 3월 20일

알고리즘 문제풀이

목록 보기
5/105

from itertools import permutations

def solution(numbers):
    num_list = [] # 입력받은 문자열을 쪼개서 모두 저장할 리스트
    permu_list = [] # 가능한 모든 순열 중 유니크한 숫자만 저장할 리스트
    prime_cnt = 0 # 소수 카운팅할 변수
    
    num_list = list(numbers)
    
    for j in range(1, len(numbers) + 1):
        data = permutations(num_list, j) # 가능한 모든 길이의 조합 생성
        
        for line in data:
            line = list(line)
            num = ''.join(line)
            if int(num) not in permu_list: # 유니크한 숫자만 리스트에 저장, 011과 11은 같은 숫자로 취급하기 때문
                permu_list.append(int(num))
    
    for elem in permu_list:
        is_prime = True
        if elem == 0 or elem == 1:
            continue
        for i in range(2, elem): # elem이 소수인지 아닌지 체크
            if elem % i == 0: # 소수가 아닌 경우 (1과 자기자신 외의 약수가 존재하는 경우)
                is_prime = False # 소수 아님, 더 볼 필요 없음
                break
        
        if is_prime == True: # 소수인 경우
            prime_cnt += 1 # 소수 갯수 + 1
    
    return prime_cnt

0개의 댓글