[프로그래머스 Python] Lv 1. 소수 만들기
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
- 문제 보러가기
문제 풀이
(1) 코드 작성
from itertools import combinations
def solution(nums):
comb = list(combinations(nums, 3))
sum_comb = sorted([sum(c) for c in comb])
prime = set(range(7, max(sum_comb)+1))
for p in list(prime):
for q in range(2, p):
if p % q == 0:
prime -= set(range(2*q, p+1, q))
return len([num for num in sum_comb if num in list(prime)])
(2) 코드 리뷰
nums에 있는 숫자들 중 서로 다른 3개를 골라야 한다는 점에서 itertools의 combinations 함수를 사용했다. 조합을 생성하고 조합별 합을 구했다. 그리고 nums에는 중복된 원소가 들어가지 않는다는 점과 3개를 골라서 더했을 때 될 수 있는 가장 작은 수(최솟값)가 7이라는 점을 사용해서 범위 내애세 소수가 될 수 있는 리스트를 prime에 만들고 prime에 있는 경우의 개수만 출력할 수 있도록 코드를 작성했다.
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기