[프로그래머스] 소수 찾기 - python 본문

코테 문제 풀이

[프로그래머스] 소수 찾기 - python

미니모아 2022. 4. 6. 22:26
반응형

소수 찾기

문제 설명

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

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한 사항

  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

풀이

1부터 len(numbers)까지 가능한 순열을 구한 후 해당 값이 소수인지 체크하고 소수일 경우 set에 넣는다. (중복 제거를 위해)

from itertools import permutations
​
def is_prime(num):
    if num <= 1:
        return False
    
    for i in range(2, int(num ** 0.5 + 1)):
        if num % i == 0:
            return False
    return True
​
def solution(numbers):
    primes = set()
    for i in range(1, len(numbers) + 1):
        for p in permutations(list(numbers), i):
            if is_prime(int(''.join(p))):
                primes.add(int(''.join(p)))
    return len(primes)

다른 사람 풀이

집합을 이용해 아리토스테네스의 체를 구현해서 가능한 조합 중 최대 값까지의 모든 소수를 구한다.

from itertools import permutations
def solution(n):
    a = set()
    for i in range(1, len(n) + 1):
        a |= set(map(int, map(''.join, permutations(list(n), i))))
        
    a -= set(range(0, 2))
    
    for i in range(2, int(max(a) ** 0.5) + 1):
        a -= set(range(2 * i, max(a) + 1, i))
    
    return len(a)
반응형
Comments