실습 - Python/프로그래머스

프로그래머스 - 완전탐색 > 소수 찾기 (Python)

개발참치 2021. 7. 21.

문제

한자리 숫자가 적힌 종이 조각이 흩어져있습니다.

흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

 

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때,

종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

 

제한사항

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

 

입출력

입출력 예

 

입출력 예 설명

  • 예제 #1

[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.

  • 예제 #2

[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.

 

분석

완전탐색 문제로서, 대부분의 원소들을 중복 검사, 소수 검사 등을 거쳐야 하는 문제로 보입니다.

 

풀이

  1. 우선 소수가 맞다면 배열(array)에 넣어주는 소수 Check 함수를 구현해주고
  2. 입력 배열의 개수만큼 반복문을 통하여, 
  3. itertools의 permutations을 이용하여 각 숫자로 이루어질 수 있는 숫자들을 구하여 배열(perList)에 포함시켜주고
  4. 배열(perList)을 반복문을 통해, 위 1번에서 구현한 소수 Check로 Filtering 하여 배열(array)에 포함해주며
  5. 마지막으로 Filtering된 배열(array)을 Set으로 치환하여 중복을 제거한 후 갯수를 출력하였습니다.

 

PyCharm 캡쳐

소스 CODE

from itertools import permutations

array = []

def check_prime_number(numberA):
    number = int(numberA)
    if number != 1 and number != 0:                 
        for f in range(2, number):  
            if number % f == 0:     
                return False
    else:
        return False

    array.append(number)


    
def solution(numbers):
    
    for length in range(1, len(numbers)+1):
        perList = list(map(''.join, permutations(list(numbers), length)))
        
        for per in perList:
            check_prime_number(per)
                

    result = set(array)
    return len(result)

댓글