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

YoungHyo Choi·2021년 4월 17일
0

Coding Test

목록 보기
21/31

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

문제 설명

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

제한사항

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

입출력 예

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

풀이

def solution(nums):
    # 전체 숫자 조합 구하기
    num_combination = []
    for i in range(len(nums)):
        for j in range(i+1, len(nums)):
            for k in range(j+1, len(nums)):
                num_combination.append(nums[i] + nums[j] + nums[k])
    
    # 합성수 구하기
    composition = []
    for num in num_combination:
        for i in range(2, num):
            if num % i == 0:
                composition.append(num)
                break
    
    answer = len(num_combination) - len(composition)
                
    return answer
  • nums에서 3개를 뽑는 조합을 생성하고
    이 중에서 합성수 (소수가 아닌 수)를 구해서 소수의 갯수를 계산했다.
from itertools import combinations
def solution(nums):
    num_combinations = [comb for comb in combinations(nums, 3)] # 숫자 조합 리스트
    
    composition_list = [] # 합성수 리스트
    for combination in num_combinations:
        num = sum(combination)
        for i in range(2, num):
            if num % i == 0:
                composition_list.append(num)
                break
                
    answer = len(num_combinations) - len(composition_list)
                
    return answer
  • 첫 풀이에서 itertools.combinations를 생각했지만 combination으로 오타를 쳐서 안됐던 것을 프로그래머스에서는 사용하지 못하는구나라고 생각해 다른 방식으로 풀었었다.
  • 같은 알고리즘이지만 itertools.combinations를 사용해서 수정해봤다.
profile
golang과 elasticsearch를 좋아하는 3년차 백엔드 엔지니어입니다.

0개의 댓글