코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.

코딩테스트 정보

  • 프로그래머스
  • python
  • level 1
  • 점수 : 캡쳐 못함
  • 문제 링크


문제

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

입출력 예

nums result
[1,2,3,4] 1
[1,2,7,6,4] 4


풀이 코드

풀이 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def solution(nums):
  from itertools import combinations
  answer = 0
  combs = [ sum(x) for x in list(combinations(nums, 3)) ]
  
  for num in combs:
    range_ = num // 2 if num % 2 == 0 else (num // 2) - 1
    temp_list = []
    for n in range(2, range_ + 1):
      if num % n == 0:
        temp_list.append(n)
        break
    if len(temp_list) == 0:
      answer += 1

  return answer


풀이 방식

■■■■ 접근 방식 ■■■■

(1) 주어진 숫자 중 3개 뽑기 : combinations를 이용
(2) 소수 검증 테스트 숫자 그룹 : 뽑은 3개의 숫자 합의 1/2까지의 자연수
(3) 소수 검증 : 뽑은 3개의 숫자를 테스트 그룹의 수로 나눴을 때 나눠떨어지는 수가 있다면 break

■■■■ 핵심 계산식 서술 ■■■■ (1번 풀이 기준)

(1) 3개의 숫자 뽑기
```python

3개의 숫자 뽑기 : combination

from itertools import combinations combs = [ sum(x) for x in list(combinations(nums, 3)) ]

위 comprehension을 풀어 쓰면

combs = [] temp = combinations(nums, 3) temp = list(temp) for x in temp: combs.append(sum(x)) ```