[Python] 세 소수의 합 [프로그래머스 Level 1]

のの·2021년 5월 24일
0

문제 설명

어떤 수를 서로 다른 소수 3개의 합으로 표현하는 경우의 수를 구하려 합니다. 예를 들어 33은 총 4가지 방법으로 표현할 수 있습니다.
3+7+23
3+11+19
3+13+17
5+11+17
자연수 n이 매개변수로 주어질 때, n을 서로 다른 소수 3개의 합으로 표현하는 경우의 수를 return 하는 solution 함수를 작성해주세요.

제한 조건

n은 1,000 이하인 자연수입니다.

풀이

  • combinations를 사용해 n 이하의 소수 3개의 합이 n이 되는지 검사하고 카운트한다.
  • 제곱수까지만 탐색하고 소수 판별
from itertools import combinations

def get_primes(n):
    primes = []
    for i in range(2, n):
        for j in range(2, int(i ** 0.5) + 1):
            if i % j == 0:
                break
        else:
            primes.append(i)

    return primes

def solution(n):
    primes = get_primes(n)
    
    return [sum(c) for c in combinations(primes, 3)].count(n)
profile
wannabe developer

0개의 댓글