알고리즘

프로그래머스 소수찾기 [파이썬]

Brad Daeho Lee 2021. 6. 19. 11:23

문제

 

코딩테스트 연습 - 소수 찾기

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

programmers.co.kr

문제풀이

from itertools import permutations
import math

def prime_number(n):
    num = math.sqrt(n)
    if n < 2:
        return False
    for k in range(2, int(num)+1):
        if n % k == 0:
            return False
    return True
    

def solution(numbers):
    answer = []
    #permutation 혹은 combination을 사용해서 숫자의 조합을 구할 수 있다.
    #permutation의 두번째 인자에는 조합되는 숫자의 개수를 정한다. 
    for i in range(1 ,len(numbers)+1):
        #map을 사용해서 tuple의 string을 합친다음 list로 만들었다.
        lst = list(map(''.join, permutations(list(numbers), i)))
        #list안에 공통되는 str을 set으로 단일화 시킨다음 다시 list로 만들었다.
        for j in list(set(lst)):
            #True값을 반환하면 j를 answer list에 포함시킨다.
            if prime_number(int(j)):
                answer.append(int(j))
    #또 set을 쓰는 이유는 맨 앞자리가 0인 str은 int로 바꿨을 때 0이 사라진다.
    #그래서 공통되는 숫자가 생길 수 있다.
    return len(set(answer))