[프로그래머스] 소수 만들기 [완전탐색Summer/Winter Coding(~2018)] [python] Level2
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
설계 및 구현
접근 방법
nums원소의 3개로 이루어진 조합 중 소수인 경우의 수를 반환해주면 된다!
소수 판별, 3개의 조합의 합을 구하는게 중요하다.
my_solution
from itertools import combinations
# 1
def isprime(n):
if n < 2:
return False
else:
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def solution(nums):
# 2
answer = set()
# 3
for i in list(combinations(nums,3)):
if isprime(sum(i)):
answer.add(i)
# 4
return len(answer)
1. isprime() 소수판별 함수를 작성한다. 소수면 True를 아니면 False를 반환한다.
2. 소수인 조합이 중복으로 있을 수 있기때문에 answer을 set자료형으로 선언해 중복을 피한다.
3. nums에서 3개의 조합의 합이 소수일 경우 answer에 추가한다.
4. answer에 중복없는 3개의 원소로 이루어진 조합의 합이 소수인 경우가 저장 되어 있으니 길이를 반환해주어 해결 할 수 있다!
반응형
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 뉴스 클러스터링 [2018 KAKAO BLIND RECRUITMENT] [python] (0) | 2020.09.28 |
---|---|
[프로그래머스] 점프와 순간이동 [Summer/Winter Coding(~2018)] [python] (0) | 2020.09.28 |
[프로그래머스] 짝지어 제거하기 [2017 팁스타운] [python] (0) | 2020.09.28 |
[프로그래머스] N개의 최소공배수 [연습문제] [python] (0) | 2020.09.27 |
[프로그래머스] JadenCase [연습문제] [python] (0) | 2020.09.26 |