프로그래머스 - 소수 만들기

Hank Kim·2022년 2월 15일
0

알고리즘 문제풀이

목록 보기
8/24
post-thumbnail

문제 설명

주어진 숫자 중 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)

profile
JavaScript, Python Algorithm

0개의 댓글