주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
from itertools import combinations
import math
def is_prime(n):
for i in range(2, int(math.sqrt(n))+1):
if n % i == 0:
return False
return True
def solution(nums):
cnt = 0
array = list(combinations(nums,3)) //조합결과를 리스트로 반환
for i in range(len(array)):
array[i] = sum(array[i])
if is_prime(array[i]):
cnt+=1
return cnt
소수판별은 sqrt를 사용할 때 3은 int(math.sqrt(n))+1)값이 2가 안되기 때문에 처리 해줘야하고,
1,2도 따로 처리해줘야하기 때문에 따로 함수로 분리하는게 훨씬 편하다.
combinations()함수를 활용해서 3개의 수를 뽑고 리스트로 만들었다. permutations()함수도 사용방법은 똑같다.
순서 상관없이 list에서 n개를 뽑아야 하면
combinations(list,n)
순서가 바뀌면 다른 경우(줄 서기)이면
permutaions(list,n)