문제 설명

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
  • nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
  • 문제 보러가기


문제 풀이

(1) 코드 작성

from itertools import combinations

def solution(nums): 
    comb = list(combinations(nums, 3))
    sum_comb = sorted([sum(c) for c in comb])
    prime = set(range(7, max(sum_comb)+1))
    for p in list(prime):
        for q in range(2, p):
            if p % q == 0:
                prime -= set(range(2*q, p+1, q))
    return len([num for num in sum_comb if num in list(prime)])

(2) 코드 리뷰

nums에 있는 숫자들 중 서로 다른 3개를 골라야 한다는 점에서 itertools의 combinations 함수를 사용했다. 조합을 생성하고 조합별 합을 구했다. 그리고 nums에는 중복된 원소가 들어가지 않는다는 점과 3개를 골라서 더했을 때 될 수 있는 가장 작은 수(최솟값)가 7이라는 점을 사용해서 범위 내애세 소수가 될 수 있는 리스트를 prime에 만들고 prime에 있는 경우의 개수만 출력할 수 있도록 코드를 작성했다.

👩🏻‍💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.

댓글남기기