CS/알고리즘

(프로그래머스) 소수 찾기

ri5 2021. 5. 8. 17:12

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한사항

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

입출력

numbers return
"17" 3
"011" 2

풀이

import itertools
def solution(numbers):
    answer = 0
    numbers = list(numbers)
    numbers_set = list()
    
    #한자리의 경우의 수부터 만들수 있는 경우의 수까지 
    for i in range(1,len(numbers)+1):
        result = list(itertools.permutations(numbers,i))
        # i자리 경우의 수를 모두 리스트에 넣어준다.
        for j in result:
            idx = "".join(map(str, list(j)))
            numbers_set.append(idx)
            
    #중복 값은 모두 제거하고 int형태로 만듬
    numbers_set = set(map(int,numbers_set))
    
    #소수 계산
    for i in numbers_set:
        print(i)
        if decimal(i):
            answer += 1
        else:
            pass       
        
    return answer

def decimal(x):
    if x <= 1:
        return False
    for i in range(2,x):
        if x % i == 0:
            return False
    return True