Posts 소수 만들기 [Python]
Post
Cancel

소수 만들기 [Python]

URL https://programmers.co.kr/learn/courses/30/lessons/12977

문제 설명

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

제한 사항

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

문제 풀이

  • nums를 받아서 각 경우의 수를 itertools를 통해서 만들어 냅니다.
  • 동일한 조합은 set을 활용하여 삭제합니다. (1,2,3, 2,3,1, 3,2,1 등)
  • 각 경우의 수별로 하나만 남은 원소들을 다 더하고, 해당 원소들이 소수인지 판멸하는 prime_number로 확인합니다.
  • 소수라면 1 아니면 0을 리턴하여 소수인 숫자만 더하게 합니다.
1
2
import itertools
import math
1
2
3
4
5
def prime_number(x):
    for i in range(2, int(math.sqrt(x)) + 1):
        if x % i ==0:
            return 0
    return 1
1
2
3
4
5
6
7
8
9
10
def solution(nums):
    answer = 0
    
    item = [sorted(i) for i in list(itertools.permutations(nums, 3))]
    item = list(set([tuple(set(i))for i in item]))
    item = list(sum(i) for i in item)
    
    for x in item:
        answer += (prime_number(x))
    return answer
1
2
nums = [1,2,3,4]
solution(nums)
1
1
1
2
nums = [1,2,7,6,4]
solution(nums)
1
4
This post is licensed under CC BY 4.0 by the author.