- 한개~전체 고르는것 까지 모두 permutation으로 경우의 수 계산

- 이후 겹치는 경우들도 있으므로 방문한 케이스들을 visited에 저장 및 재방문 시 생략

- 소수 구할때는 2~n의 제곱근까지만 검사하여 시간 단축

from itertools import permutations
import math

def check_prime(n):
    if n <= 1:
        return False
    elif n == 2:
        return True
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True

def solution(numbers):
    answer = 0
    visited = set()
    for i in range(1, len(numbers)+1):
        allcase = list(permutations(numbers, i))
        for case in allcase:
            temp = int("".join(case))
            if temp not in visited:
                visited.add(temp)
                if check_prime(temp):
                    answer += 1
    return answer

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글

[ Lv 2 ] 뉴스 클러스터링  (0) 2021.06.22
[ Lv 2 ] 게임 맵 최단거리  (0) 2021.06.22
[ Lv 2 ] 더 맵게  (0) 2021.06.21
[ Lv 2 ] 기능개발  (0) 2021.06.21
[ Lv 2 ] 타겟 넘버  (0) 2021.06.21

+ Recent posts