[프로그래머스] 소수 만들기 [완전탐색Summer/Winter Coding(~2018)] [python] Level2

 

문제 설명

 

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

 

제한사항

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

 

설계 및 구현

 

접근 방법

 

nums원소의 3개로 이루어진 조합 중 소수인 경우의 수를 반환해주면 된다!

소수 판별, 3개의 조합의 합을 구하는게 중요하다.

 

my_solution

from itertools import combinations

# 1
def isprime(n):
    if n < 2:
        return False
    else:
        for i in range(2, int(n ** 0.5) + 1):
            if n % i == 0:
                return False
        return True

def solution(nums):

    # 2
    answer = set()
    
    # 3
    for i in list(combinations(nums,3)):
        if isprime(sum(i)):
            answer.add(i)
            
    # 4        
    return len(answer)

1. isprime() 소수판별 함수를 작성한다. 소수면 True를 아니면 False를 반환한다.

2. 소수인 조합이 중복으로 있을 수 있기때문에 answer을 set자료형으로 선언해 중복을 피한다.

3. nums에서 3개의 조합의 합이 소수일 경우 answer에 추가한다.

4. answer에 중복없는 3개의 원소로 이루어진 조합의 합이 소수인 경우가 저장 되어 있으니 길이를 반환해주어 해결 할 수 있다!

반응형

+ Recent posts