/ ALGORITHM

(프로그래머스 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')