Programmers
Meet the best programming lessons in videos and practices. Programmers provide programing lessons, algorithm problems, programming competitions, and blockchain materials.
프로그래머스 문제풀이
문제
코딩테스트 연습 – 소수 만들기
Suppose that you want to count the number of cases where a prime number is generated when adding 3 numbers among the given numbers. Given an array nums containing numbers as the parameter, write a function solution to return the number of cases where a prime number is generated when adding 3 differe…
문제설명
주어진 숫자 중 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을 만들 수 있습니다.
문제해결과정
- nums리스트에서 숫자 3개를 더했을때 소수가 되는 경우의 수를 찾는 문제이다.
위 같은 문제 및 제한사항을 해석하고 문제풀이를 시작하면 됩니다.
나의 풀이
마침 combinations함수를 알고있어서 썼다. 수학시간에 순열(permutation)과 조합(combination)을 배운적이 있을 것이다.
바로 그때 배운 조합을 파이썬에서 itertools라는 모듈에서 함수를 제공해준다.(참고로 순열함수도 제공한다.)
from itertools import combinations def solution(nums): answer = 0 L=list(combinations(nums,3)) #combinations(리스트, n)결과값을 리스트형태로 저장한다. for i in L: #소수인지를 검사해서 카운팅한다. result = sum(i) for n in range(2,result): if result%n==0: break if n==result-1: answer += 1 return answer
조합 – 위키백과, 우리 모두의 백과사전
조합론에서 조합(組合, 문화어: 무이, 영어: combination)은 서로 다른 n개의 원소를 가지는 어떤 집합 (사실, 집합은 서로 다른 원소의 모임으로 정의된다.)에서 순서에 상관없이 r개의 원소를 선택하는 것이며, (즉, 선택의 순서와 상관없이 같은 원소들이 선택되었다면 같은 조합이며 다른 원소들이 선택되었다면 다른 조합이다.) 이는 n개의 원소로 이루어진 집합에서 r개의 원소로 이루어진 부분집합을 만드는 것 혹은 찾는 것과 같다. 가능한 조합의 수는 이항계수와 같다.
다른 사람의 풀이
유사한 풀이들만 있어서 이번엔 가져오지 않았습니다.