문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
<코드>
from itertools import permutations
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def solution(numbers):
# 가능한 모든 숫자 조합 생성
possible_numbers = set()
for i in range(1, len(numbers) + 1):
# permutations를 통해 각 자리수의 숫자 조합 생성
perms = permutations(numbers, i)
for p in perms:
num = int(''.join(p))
possible_numbers.add(num)
# 소수 판별
prime_count = 0
for num in possible_numbers:
if is_prime(num):
prime_count += 1
return prime_count
<풀이과정>
- 모든 숫자 조합 생성: 주어진 문자열 numbers에서 가능한 모든 순열(permutation)을 생성(길이가 1인 조합부터 문자열의 길이만큼까지)
- 소수 판별: 생성된 숫자 조합 중에서 소수 판별
- 중복 제거: 같은 소수가 중복 카운트 되지 않도록, 소수들을 집합(set)으로 관리
- is_prime 함수: 숫자가 소수인지 확인
- solution 함수:
- itertools.permutations를 사용해 가능한 모든 숫자 조합을 생성
- 조합들을 int로 변환한 후, possible_numbers 집합에 추가
- 집합에 있는 숫자 중에서 소수인 숫자 개수 구하기
'2024 코딩테스트 스터디' 카테고리의 다른 글
[11주_5일차] 프로그래머스-피로도(Python) (0) | 2024.08.17 |
---|---|
[11주_4일차] 프로그래머스-카펫(Python) (0) | 2024.08.16 |
[11주_2일차] 프로그래머스-모의고사(Python) (0) | 2024.08.14 |
[11주_1일차] 프로그래머스-최소직사각형(Python) (0) | 2024.08.13 |
[10주_7일차] 백준-2212 센서(Python) (0) | 2024.08.12 |