문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 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
[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.
- 11과 011은 같은 숫자로 취급합니다.
문제풀이
- itertools의 순열(permutations)함수 사용 (itertools는 효율적인 looping을 위한 이터레이터를 만드는 함수로서 파이썬의 표준 라이브러리이다.)
- 만들 수 있는 모든 경우를 별도의 배열(allCase)에 담는다
- 중복되는 경우는 제거 set()사용
- 11과 011이 같은 숫자로 취급 받는다. (문자형 '011'은 int()로 형변환시 11이 된다.)
- 소수를 판별하는 함수를 만든다.
- allcase를 탐색해서 소수인경우 answer배열에 넣는다. (단 이미 answer에 있는 경우는 제외한다)
from itertools import permutations
numbers = "17"
def solution(numbers):
answer = []
allCase = []
numbers = list(numbers)
for i in range(1 , len(numbers)+1):
allCase = list(map(''.join ,permutations(numbers, i)))
for j in set(allCase):
if primeNumber(int(j)) and int(j) not in answer:
answer.append(int(j))
return len(answer)
def primeNumber(n):
if n < 2:
return False
else:
for i in range(2, n):
if n%i == 0:
return False
return True
'코딩테스트 연습 > 프로그래머스' 카테고리의 다른 글
[Python] 프로그래머스 (숫자의 표현) (0) | 2021.10.07 |
---|---|
[Python] 프로그래머스 (가장 큰 수) 정렬 (0) | 2021.10.03 |
[Python] 프로그래머스 (행렬의 곱셉) (0) | 2021.09.29 |
[Python] 프로그래머스 (N개의 최소공배수) (0) | 2021.09.28 |
[Python] 프로그래머스 (최소직사각형) 위클리 첼린지 8주차 (0) | 2021.09.27 |
댓글