코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.
코딩테스트 정보
- 프로그래머스
- 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개의 숫자 뽑기
```python3개의 숫자 뽑기 : 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)) ```