본문 바로가기
프로그래머스/Lv.2

[프로그래머스 Lv.2][완전탐색] 소수 찾기 (python)

by 똥먹는낙타 2022. 11. 4.
728x90
반응형

문제 설명

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

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

제한사항
  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
입출력 예numbersreturn
"17" 3
"011" 2
입출력 예 설명

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

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

  • 11과 011은 같은 숫자로 취급합니다.

 

✔️ Code

from itertools import permutations

#소수 판별 함수
def is_prime_number(x) :
    if x < 2 :
        return False
    
    for i in range(2, x) :
        if x % i == 0 :
            return False
            
    return True

def solution(numbers):
    answer = 0
    nums = []
    
    for i in range(1, len(numbers)+1) :
        #순열 모듈 사용해서 나올 수 있는 모든 수 조합
        nums.append(list(set(map(''.join, permutations(numbers, i)))))
    per = list(set(map(int, set(sum(nums, [])))))
    
    for p in per :
        if is_prime_number(p) == True :
            answer += 1

    return answer

 

✏️ Comment

1. 순열 모듈을 사용사여 numbers의 원소들로 만들 수 있는 모든 수 조합을 중복없이(set사용) 구해서 nums 배열에 집어넣음

2. per 배열에 해당 조합들을 합쳐서 int형으로 집어넣음

3. per 배열의 원소들 중에서 is_prime_number 함수를 통해 소수인지 아닌지 판별함

permutations를 써야겠다고 생각도 하고, 어떤 방식으로 풀어야할지는 바로 생각했는데 너무 오랜만에 사용하려니 구현이 잘 안돼서;;; ㅠㅠ 망각의 동물.... 구글링을 통해 참고했다.. 다시 공부할 것. 

728x90
반응형

댓글