from itertools import permutations
def isPrime(num):
if num <= 1:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
def solution(numbers):
numbers = list(numbers)
arr = set()
for i in range(len(numbers)):
temp = list(set(map(''.join , permutations(numbers, i+1)))) # map함수를 사용해서 더 간단하게 permutations을 가공한다.
for i in temp:
if isPrime(int(i)):
arr.add(int(i))
return len(arr)
이 문제는 파이썬의 기본적인 것이 많이 들어가는 문제이다. 일단 조각을 합친다는 말과 앞뒤도 바꿀수 있다는 말에 순열인 permutations 함수를 사용했다. numbers를 리스트로 변환시키고 이 리스트의 갯수 만큼 순열을 찾는 permutaions를 사용한다. 이 때 map함수를 사용하여 안의 원소를 ''.join 시킨 원소들를 temp 리스트로 만들고 이 원소들을 에라토스테네스의 체 함수인 isPrime에 삽입하여 소수인지 판명한다. 그리고 소수인지 판명된다면 set()으로 만들어진 arr에 add를 시키고 그 원소의 갯수인 len(arr)을 반환시킨다.
만약 여기서 에라토스테네스의 체를 모른다면 isPrime 함수를 외우고 이에 대한 개념을 https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4 여기서 찾아보길 권장한다.