소수
- 가능한 경우의 수 생성 ( 순열 )
- 정렬 후, 소수체크
- 이때 예외케이스들 ( 0,1,2 ) 처리해줌.
- 만약 소수체크 로직에서 시간이 너무 오래걸린다면 해쉬맵을 만들어서 시간을 단축시킬 필요가 있음
import itertools
def solution(numbers):
# numbers = '1231'
# 가능한 경우의 수 생성 ---------------------------------------
temp_list = []
for i in range(len(numbers)):
temp_list.append(numbers[i])
pos_cases = []
for i in range(len(numbers)):
temp_cases = list(map(int,map(''.join, itertools.permutations(temp_list, i+1))))
pos_cases.extend(temp_cases)
pos_cases = set(pos_cases)
pos_cases = list(pos_cases)
pos_cases.sort()
print(pos_cases)
# 소수 체크 ------------------------------------------------------------
prime_cases = []
for pos_case in pos_cases:
if pos_case ==0 or pos_case ==1:
pass
if pos_case ==2:
prime_cases.append(pos_case)
flag = 0
for i in range(2, pos_case+1): # 1, 자기자신은 제외
if pos_case%i ==0 :
break # 이미 소수가 아니므로 중단
else:
flag += 1
if flag == pos_case-2:
# print(i,'pos_case :',pos_case, '| flag :',flag)
prime_cases.append(pos_case)
print(prime_cases)
return len(prime_cases)