[Py_Lv1] 소수 만들기

Sunghun📈·2021년 8월 20일
0

프로그래머스

목록 보기
50/93
post-thumbnail

문제 설명

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

제한 사항

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

입출력 예

입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.

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

접근법

아주 한참을 고민하다가 인터넷을 찾아 힌트를 얻고 겨우 풀었다.

이 문제를 풀기위해서는 2가 핵심이 알아야 한다.

  1. itertools 라이브러리에 combination 함수다.
    [1,2,3,4]에 값이 들어있는 list에 3개의 숫자를 뽑아 만들 수 있는 모든 조합을
    하나에 list에 넣고 싶은 경우 list(combination(list, 3))로 선언하면 간단하게
    구할 수 있다.

    이 함수를 모르고 직접 구현을 하려니 너무 어려웠는데 이렇게 쉽게 해결될 줄이야....

  2. 소수를 판별하기 위해 나누는 숫자에 범위이다. 물론 소수판별을 위해 1과 자신을 제외한
    모든 수로 나눠보아도 되지만 효율성을 위해 2부터 소수판별을 원하는 숫자의 절반까지만
    나눠보는 것이다. 28이나 82나 결과는 같다 그렇기 때문에 절반까지만 값을 이용해도
    문제를 풀 수 있다.

그 외에는 어렵지 않게 풀수 있는 문제였다.😎😋

=============================================================

from itertools import combinations

def prime_numbers(num):
    if num == 0 or num == 1:
        return False
    else:
        for i in range(2,(num//2) +1):
            if num % i == 0:
                return False
        
        return True

def solution(nums):
    answer = 0
    cmb = list(combinations(nums, 3))
    for i in cmb:
        if prime_numbers(sum(i)):
            answer +=1
    return answer
profile
데이터 분석과 AI 분야의 전문가를 꿈꾸는 청년

0개의 댓글