한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
numbers | return |
---|---|
"17" | 3 |
"011" | 2 |
from itertools import permutations
# 조합을 이용해서 만들 수 있는 수를 만들어준다.
def solution(numbers):
prime=[]
for i in range(1,len(numbers)+1):
for j in list(set(permutations(numbers, i))):
if ''.join(j)[0]!='0':
prime.append(int(''.join(j)))
# 소수를 answer에 담아준다.
answer=[]
for i in prime:
if i<2:
continue
check = True
for j in range(2, int(i**0.5)+1):
if i%j==0:
check=False
break
if check:
answer.append(i)
return len(set(answer))
primeSet = set()
def isPrime(number):
if number in (0, 1):
return False
for i in range(2, number):
if number % i == 0:
return False
return True
def makeCombinations(str1, str2):
if str1 != "":
if isPrime(int(str1)):
primeSet.add(int(str1))
for i in range(len(str2)):
makeCombinations(str1 + str2[i], str2[:i] + str2[i + 1:])
def solution(numbers):
makeCombinations("", numbers)
answer = len(primeSet)
return answer
재귀함수를 이용한 방식!
2차 테스트를 향해서..
출처: 프로그래머스
오류가 있으면 댓글 달아주세요🙂