관리 메뉴

커리까지

[프로그래머스] 소수 만들기 파이썬 본문

알고리즘/풀이

[프로그래머스] 소수 만들기 파이썬

목표는 커리 2022. 6. 15. 20:51
728x90
SMALL

문제 설명

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

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

입출력 예
nums result
[1,2,3,4] 1
[1,2,7,6,4] 4
입출력 예 설명

입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.

입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.

제출 답안

  1. 먼저 comtinations을 사용해서 조합을 구한다.
    1. 여기서 중복 없이 조합을 구하는 라이브러리가 combinations이다.
    2. 중복 조합은 permutations 을 사용하면 된다.
  2. 그 조합의 개수만큼 for loop를 돈다.
  3. 해당 조합의 합계를 소수 판별 함수에 넣어서 True 인지 False 인지 확인한다.
    1. 소수 판별 함수는 인자로 들어온 숫자의 제곱근을 확인하는 것이다.
    2. 만약 나누어지는 경우가 있으면 소수가 아니기에 False를 반환
    3. 나누어지지 않으면 소수이기에 True를 반환한다.
    4. 그래서 if면 answer 에 1을 더한다.
from itertools import combinations
import math


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


def solution(nums):
    # 1
    nums_combi = list(combinations(nums, 3))
    answer = 0
    # 2
    for i in nums_combi:
        # 3
        if is_prime_number(sum(i)):
            answer += 1
    return answer
728x90
LIST
Comments