URL https://programmers.co.kr/learn/courses/30/lessons/12977
문제 설명
- 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
문제 풀이
- nums를 받아서 각 경우의 수를 itertools를 통해서 만들어 냅니다.
- 동일한 조합은 set을 활용하여 삭제합니다. (1,2,3, 2,3,1, 3,2,1 등)
- 각 경우의 수별로 하나만 남은 원소들을 다 더하고, 해당 원소들이 소수인지 판멸하는 prime_number로 확인합니다.
- 소수라면 1 아니면 0을 리턴하여 소수인 숫자만 더하게 합니다.
1
2
import itertools
import math
1
2
3
4
5
def prime_number(x):
for i in range(2, int(math.sqrt(x)) + 1):
if x % i ==0:
return 0
return 1
1
2
3
4
5
6
7
8
9
10
def solution(nums):
answer = 0
item = [sorted(i) for i in list(itertools.permutations(nums, 3))]
item = list(set([tuple(set(i))for i in item]))
item = list(sum(i) for i in item)
for x in item:
answer += (prime_number(x))
return answer
1
2
nums = [1,2,3,4]
solution(nums)
1
1
1
2
nums = [1,2,7,6,4]
solution(nums)
1
4