프로그래머스 - 소수찾기(완전탐색) [python]

Stella·2022년 4월 11일
0

Coding Test

목록 보기
14/48
post-custom-banner

문제링크:https://programmers.co.kr/learn/courses/30/lessons/42839

소수찾기

문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한 조건
numbers는 길이 1 이상 7 이하인 문자열입니다.
numbers는 0~9까지 숫자만으로 이루어져 있습니다.
"013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

입출력 예

numberreturn
"17"3
"011"2

Solution (Python)

from itertools import permutations
import math
def solution(numbers):

    # numbers의 값들을 하나씩 잘라서 저장
    n_list = [n for n in numbers]
    result = []
    
    for i in range(len(n_list)):
        # 만들 수 있는 순열 구하기
        result += list(permutations(n_list,i+1))
    
    # 만들어진 순열 리스트로 저장
    t_list = [int(''.join(r)) for r in result]
    t_list = set(t_list) # set으로 중복 제거
    answer = []

    for t in t_list:
        # 0과 1은 소수가 아님
        if int(t) == 0 or int(t) == 1:
            continue
        
        check = True
        # 소수인지 확인
        for i in range(2, int(math.sqrt(int(t))+1)):
            if int(t) % i == 0: # 나누어떨어지면 소수가 아님.
                check = False
                break
        
        # 소수만 저장
        if check:
            answer.append(t)

    return len(answer)

입력받은 numbers를 가능한 모든 순열을 구한다. 구한 순열들을 리스트에 넣어주고, 중복을 제거한다. 그리고 리스트에 들어있는 값이 소수인지 아닌지 확인.

profile
Hello!
post-custom-banner

0개의 댓글