문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
입출력 예
입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.
입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.
접근법
아주 한참을 고민하다가 인터넷을 찾아 힌트를 얻고 겨우 풀었다.
이 문제를 풀기위해서는 2가 핵심이 알아야 한다.
itertools 라이브러리에 combination 함수다.
[1,2,3,4]에 값이 들어있는 list에 3개의 숫자를 뽑아 만들 수 있는 모든 조합을
하나에 list에 넣고 싶은 경우 list(combination(list, 3))로 선언하면 간단하게
구할 수 있다.
이 함수를 모르고 직접 구현을 하려니 너무 어려웠는데 이렇게 쉽게 해결될 줄이야....
소수를 판별하기 위해 나누는 숫자에 범위이다. 물론 소수판별을 위해 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