프로그래머스 – 소수 만들기 문제 Python

프로그래머스 문제풀이

문제

문제설명

주어진 숫자 중 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리스트에서 숫자 3개를 더했을때 소수가 되는 경우의 수를 찾는 문제이다.

위 같은 문제 및 제한사항을 해석하고 문제풀이를 시작하면 됩니다.

나의 풀이

마침 combinations함수를 알고있어서 썼다. 수학시간에 순열(permutation)과 조합(combination)을 배운적이 있을 것이다.

바로 그때 배운 조합을 파이썬에서 itertools라는 모듈에서 함수를 제공해준다.(참고로 순열함수도 제공한다.)

from itertools import combinations
def solution(nums):
    answer = 0
    L=list(combinations(nums,3))    #combinations(리스트, n)결과값을 리스트형태로 저장한다.
    for i in L:                     #소수인지를 검사해서 카운팅한다.
        result = sum(i)
        for n in range(2,result):
            if result%n==0:
                break
            if n==result-1:
                answer += 1
    return answer

다른 사람의 풀이

유사한 풀이들만 있어서 이번엔 가져오지 않았습니다.