[프로그래머스][Python] 12977 소수 만들기

beeeen:D·2023년 4월 13일

Programmers

목록 보기
8/16

12977 소수 만들기

문제 설명

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

제한사항

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

입출력 예

numsresult
[1,2,3,4]1
[1,2,7,6,4]4

입출력 예 설명

입출력 예 #1

  • [1,2,4]를 이용해서 7을 만들 수 있습니다.

입출력 예 #2

  • [1,2,4]를 이용해서 7을 만들 수 있습니다.
  • [1,4,6]을 이용해서 11을 만들 수 있습니다.
  • [2,4,7]을 이용해서 13을 만들 수 있습니다.
  • [4,6,7]을 이용해서 17을 만들 수 있습니다.

🎯 풀이 과정

  1. nums로 조합 리스트 만들기
  2. 조합 리스트에서 각 조합 sum 구해서 소수인지 판별하기
from itertools import combinations

def solution(nums):
    answer = 0
    
    # 조합 리스트 만들기
    comb_list = list(combinations(nums, 3))
    comb_sum_list = [sum(n) for n in comb_list]
    
    n = max(comb_sum_list)
    prime_nums = set(range(2, n + 1))
    
    # sum 중에 가장 큰 값까지 소수 리스트 구하기
    for i in range(2, n + 1):
        if i in prime_nums:
            prime_nums -= set(range(2 * i, n + 1, i))
            
    # sum 리스트 중 소수 몇 개인지 확인하기
    for n in comb_sum_list:
        if n in prime_nums:
            answer += 1
    
    return answer

조합(combination)

조합이란? 리스트에서 뽑을 수 있는 모든 경우의 수

from itertools import combinations

nums = [1,2,3,4]
comb = list(combinations(nums, 2))

> [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] 
profile
Appel Developer Academy @ Postech | iOS developer 👩🏻‍💻

0개의 댓글