본문 바로가기
Programming/Programmers

[프로그래머스] 소수 찾기 (Python)

by 데이터현 2021. 10. 29.

https://programmers.co.kr/learn/courses/30/lessons/42839

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr

itertools의 permutations와 에라토스테네스의 체를 활용해서 문제를 풀었다.

나의 코드

from itertools import permutations
def solution(numbers):
    def prime_list(n):
    # 에라토스테네스의 체 초기화: n개 요소에 True 설정(소수로 간주)
        sieve = [True] * n

        m = int(n ** 0.5)
        for i in range(2, m + 1):
            if sieve[i] == True:           # i가 소수인 경우 
                for j in range(i+i, n, i): # i이후 i의 배수들을 False 판정
                    sieve[j] = False
        return [i for i in range(2, n) if sieve[i] == True]
    answer = 0
    prime_list = prime_list(int('9'*len(numbers)))
    permu_set = set()
    for i in range(1,len(numbers)+1):
        permu = list(permutations(numbers,i))
        for p in permu:
            permu_set.add(int(''.join(p)))
    for i in list(permu_set):
        if i in prime_list: answer +=1
    return answer

 

댓글