주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
nums | result |
---|---|
[1, 2, 3, 4] | 1 |
[1, 2, 7, 6, 4] | 4 |
조합으로 풀면 모든 조합 가능한 경우에 대해 조합의 경우를 구할 수 있을 것이다. 그렇게 구한 조합 가능한 수들의 집합을 각각 더해 만든 숫자들을 대상으로 소수인지 아닌지 검사하면 풀 수 있을 것이다.
from itertools import combinations
from math import sqrt
def solution(nums):
nums = list(map(sum, combinations(nums, 3)))
answer = len(nums)
for num in nums:
for x in range(2, int(sqrt(num)) + 1):
if not num % x:
answer -= 1
break
return answer
combinations
를 통해 조합 기능을 사용하고, 이때 구해진 조합 수들에 대해 sum
으로 맵핑해서 더해진 값들을 가져온다.
이후 answer
에 먼저 nums
의 길이를 저장한 후 nums
에서 하나씩 수를 가져와 그 수가 소수라면 answer
의 값을 1 감소시키는 것으로 정답을 구해나갔다.
def solution(nums):
from itertools import combinations as cb
answer = 0
for a in cb(nums, 3):
cand = sum(a)
for j in range(2, cand):
if cand%j==0:
break
else:
answer += 1
return answer
위와 같이 for ... else
구문을 이용하여 answer
의 값을 구할 수도 있다. 또한, map
을 사용하지 않고도 위와 같이 따로 구할 수도 있다.