(프로그래머스 with python) 소수찾기
Level2 - 소수찾기
https://programmers.co.kr/learn/courses/30/lessons/42839
from itertools import permutations
def solution(numbers):
per = []
for k in range(1, len(numbers)+1):
per += permutations(numbers, k)
arr = list(set([int(''.join(i)) for i in per]))
for i in arr[:]:
if i != 1 and i != 0:
for j in range(2, i):
if i % j == 0:
arr.remove(i)
break # 안하면 ValueError: list.remove(x): x not in list 에러발생
else:
arr.remove(i)
return len(arr)
다른풀이
합집합, set 이용
from itertools import permutations
def solution(n):
a = set()
for i in range(len(n)):
a |= set(map(int, map(''.join, permutations(list(n), i + 1)))) # 합집합과 permutations, set 이용해서 나올수 있는 경우의 수 출력
a -= set(range(0, 2)) # 0,1은 소수에서 제외되기 때문에 제외
for i in range(2, int(max(a) ** 0.5) + 1): # 약수의 특성을 활용해 소수 판별 함수, 약수의 중간값을 기준으로 한쪽을 검사함
a -= set(range(i * 2, max(a) + 1, i))
return len(a)
solution('17')