한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
[제한사항]
[입출력 예]
| numbers | return |
|---|---|
| "17" | 3 |
| "011" | 2 |
11이 여러 번 생성되지 않도록 set을 사용한다from itertools import permutations
def is_prime(number):
if number < 2: # 소수는 2 이상의 자연수
return False
for i in range(2, int(number ** 0.5) + 1): # 제곱근까지만 확인
if number % i == 0:
return False
return True
def solution(numbers):
possible_numbers = set()
for length in range(1, len(numbers) + 1):
for perm in permutations(numbers, length):
possible_numbers.add(int("".join(perm)))
# 2. 소수 개수 세기
prime_count = sum(1 for num in possible_numbers if is_prime(num))
return prime_count
itertools.permutations를 사용해 문자열로부터 가능한 모든 조합을 생성하고,int("".join(perm))로 문자열을 숫자로 변환해 set에 저장하면 중복 제거가 가능하다is_primesum으로 계산한다.이 문제는 완전탐색의 전형적인 예제였다. 숫자 조합 생성(순열)과 소수 판별(효율적인 알고리즘)이 결합된 문제였고, 특히 Python의 itertools 라이브러리가 얼마나 중요하게 사용되는지 알 수 있었다. 다음에는 조합(combination)과 다른 탐색 방법에 대해서도 풀어보고 싶다.