알고리즘

순열 #프로그래머스 소수찾기

현쥬스주스 2021. 3. 30. 16:38

programmers.co.kr/learn/courses/30/lessons/42839

 

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

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

programmers.co.kr

 

[ 문제 해결방법 ]

  • check라는 함수를 만들어서 소수를 판정
    • 여기서, math.sqrt를 사용하는 이유는 제곱수의 경우 소수가 아니기 때문에 이를 통해 판정
  • permutations를 이용해서 모든 경우의 수를 만들고 판정
    • 단, 여기서 중복되는 수가 발생해서 set으로 미리 줄이고 하면 속도가 많이 빨라짐
  • answer에 모든 소수를 집어넣고 길이를 출력하면 정답

 

 

[ 소스코드 ]

from itertools import permutations
import math

def check(n):
    k = math.sqrt(n)
    if n < 2: 
        return False

    for i in range(2, int(k)+1):
        if n % i == 0:
            return False
    return True

def solution(numbers):
    answer = []
    for k in range(1, len(numbers)+1):
        perlist = list(map(''.join, permutations(list(numbers), k)))
        for i in list(set(perlist)):
            if check(int(i)):
                answer.append(int(i))

    answer = len(set(answer))

    return answer