본문 바로가기

자료구조 & 알고리즘 & cs/CodingTest

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

▶ 문제 설명

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

▶ 제한사항

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
  • nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

▶ 입출력 예

[1,2,3,4] 1
[1,2,7,6,4] 4

▶ 내가 짠 코드

from itertools import combinations
import math

def solution(nums):
    
    answer = 0
    random_list = list(combinations(nums,3))
    
    for i in random_list:
        x = sum(i)
        if prime(x):
            answer += 1
    return answer

def prime(x):
    for i in range(2, int(math.sqrt(x)+1)):
        if x % i == 0:
            return False
    return True

소수임을 판별하는 prime함수를 따로 작성하였다.

이때 math를 import 하여 약수 개수의 법칙을 사용하여 소수임을 판별한다.

그리고 넘겨받은 nums 리스트에서 중복을 허용하지 않고 3개의 숫자를 조합하여 뽑는 것은 combinations를 사용하였다.

▶ 참고사항

- combinations의 사용

리스트 안에서의 여러 조합을 구할 때 파이썬 기본 라이브러리인 itertools를 사용하는 방법이 여러개 있다.

from itertools import product
from itertools import permutations
from itertools import combinations

product : 두개 이상의 리스트에서의 모든 조합을 계산한다.

permutations: 리스트 하나에서의 모든 조합 (중복 o)

combinations: 리스트 하나에서의 모든 조합 (중복 x)

세 가지 모두 tuple 형식으로 값을 리턴한다.

 

728x90