쿠쿠의기록

[프로그래머스/파이썬] (완전탐색 Lv.2) - 소수 찾기 본문

프로그래머스(코딩테스트 고득점Kit)/완전탐색(Brute Force Search)

[프로그래머스/파이썬] (완전탐색 Lv.2) - 소수 찾기

쿠쿠트레인 2023. 12. 11. 17:31

문제 설명

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

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

제한사항

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

입출력 예

numbers  return
"17" 3
"011" 2

입출력 예 설명

입출력 예 #1

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

 

입출력 예 #2

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

✍ 문제풀이

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

📝 문제풀이 설명

=> 입력받은 종이 조각을 통해 모든 조합의 수를 구한다 (permutation 사용)

=> 조합의 수 中 소수의 갯수를 체크한다 is_prime_number() 함수 사용

🌐문제링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr