from itertools import permutations, combinations
def is_prime(n):
if n == 1:
return False
i = 2
while i<n:
if n%i==0:
return False
i+=1
return True
def solution(numbers):
numbers = list(numbers)
combi = [] ; combi2 = []
for l in range(1, len(numbers)+1):
combi += combinations(numbers,l)
for l in combi:
c = permutations(l)
for k in c:
a = ''.join(k)
if a not in combi2:
combi2.append(a)
combi2 = list(set((map(int,combi2))))
answer = 0
for i in combi2:
if i < 2:
pass
elif is_prime(i):
answer+=1
return answer
풀이
from itertools import permutations #일반 순열 from itertools import product #중복순열 [1,1,2] from itertools import combinations #일반 조합 from itertools import combinations_with_replacement #중복 조합
먼저 소수 판별 함수 is_prime()을 먼저 정의하고, solution()을 짰다.
combinations로 조합가능한 리스트를 모두 만든 뒤, 이 리스트들로 만들 수 있는 값들을 permutation(일반순열)으로 정렬한다. 그리고 정렬한 값을 join으로 1 value로 만든 다음, combi2에 더한다.
combi2에 있는 값들을 map을 사용해서 모두 int로 변경한 뒤, is_prime()에 입력하며 소수를 판별해 answer을 구한다.