from itertools import permutations
# permutations를 사용하기 위한 library import
def solution(numbers):
# 기능별로 함수를 분리해서 작성하는 것이 좋다 (def solution, def is_prime)
# 지금 작성하는 함수는 인자로 들어온 numbers 문자열을 list로, 그리고 순열을 이용하여 is_prime함수를 이용하여 소수인지 판별할 함수
numbers = list(numbers)
# 인자로 주어진 numbers를 list화 한다 --> 순열로 만들 때의 편리성 도모
answer = 0
# return해줄 answer 변수 미리 지정
for n in range(1, len(numbers)+1):
# range(a, b)는 b '미만'까지 그 범위로 인식하므로 len(numbers)+1
tmp=set(map(''.join, permutations(numbers,n)))
# numbers로 받은 숫자의 자리 수 개수만큼 for문을 돌며,
# n=1일 때는 각 숫자를 일의자리만 있는 수로 인식하여 한 자리 수 순열 생성
# n=2일 때는 각 숫자를 십의자리까지 있는 수로 인식하여 일의 자리 수와 십의 자리 수를 이용한 순열 생성
# n=3일 때는 각 숫자를 백의자리까지 있는 수로 인식하여 일의 자리 수, 십의 자리 수, 백의 자리 수를 이용한 순열 생성
# 이 과정을 numbers로 초기에 받은 숫자의 자리수만큼 반복
# 그리고 생성한 순열들 중 중복 값이 있을 수 있어 set으로 처리
# ex. numbers = '2447'로 들어갈 경우, 두 번째 4와 세 번째 4는 다른 것으로 컴퓨터는 인식
for i in tmp:
# 그렇게 자리수별로 생성된 tmp set 요소를 돌며
if i[0]!='0' and is_prime(int(i)):
# 첫 시작을 0으로 하지 않고 그 요소를 int화하여 is_prime 함수에 돌렸을 때 True인 경우
answer+=1
# 우리가 찾는 바로 그 값이므로 경우의 수 하나 찾았다는 뜻으로 +1
return answer
# 그리고 그렇게 쌓인 answer 리턴
def is_prime(num):
# 소수인지 판별하는 함수
if num<2:
return False
for i in range(2,num):
if num%i==0:
return False
return True
set(map(''.join, permutations(numbers,n)))
)