본문 바로가기

Archived(CSE Programming)/알고리즘(Python)

프로그래머스 - 소수 찾기(파이썬, LV2, 완전탐색)

https://programmers.co.kr/learn/courses/30/lessons/42839?language=python3#

 

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

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

programmers.co.kr

풀이

파이썬의 itertools의 permutation을 통해서 쉽게 구현이 가능했다.

먼저 모든 순열을 다 고려하는데, 만들어진 순열 String을 Integer로 변경하고

해당 Integer가 소수 Prime 인지 체크해서 개수를 카운트해주면 된다.

이 때, 중복 값 방지를 위해 개수 카운트 시 집합을 활용한다.

import itertools

# 소수체크
def prime_check(a):
    if(a<=1):
        return False
    for n in range(2,a):
        if a % n == 0:
            return False
    return True

def solution(numbers):
    
    # 집합에 permuation 통해 탐색하며 값 추가
    val_set = set()
    for i in range(len(numbers),0,-1):
        for val in list(map("".join, itertools.permutations(numbers,i))):
            if prime_check(int(val)) is True:
                val_set.add(int(val));
    
    return len(val_set)