데이터 꿈나무
[코딩 테스트] 프로그래머스_삼총사_리스트에서 추출하여 더하기(Python) 본문
문제설명
한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.
한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.
제한사항
- 3 ≤ number의 길이 ≤ 13
- -1,000 ≤ number의 각 원소 ≤ 1,000
- 서로 다른 학생의 정수 번호가 같을 수 있습니다.
입출력 예
| number | result |
| [-2, 3, 0, 2, -5] | 2 |
| [-3, -2, -1, 0, 1, 2, 3] | 5 |
| [-1, 1, -1, 1] | 0 |
입출력 예 설명
입출력 예 #1
- 문제 예시와 같습니다.
입출력 예 #2
- 학생들의 정수 번호 쌍 (-3, 0, 3), (-2, 0, 2), (-1, 0, 1), (-2, -1, 3), (-3, 1, 2) 이 삼총사가 될 수 있으므로, 5를 return 합니다.
입출력 예 #3
- 삼총사가 될 수 있는 방법이 없습니다.
코드를 설명하기 전에 우선 map함수와 combinations 함수에 대해서 개념을 간단히 짚고 갈게요!
※ map함수란?
map(funtion, iterable)
첫 번째 매개변수로는 함수가 오고, 두 번째 매개면수로는 반복 가능한 자료형(리스트, 튜플 등)이 옵니다.
map 함수의 반환 값은 map 객체이기 때문에 해당 자료형을 list 혹은 tuple로 형변환을 시켜주어야 합니다.
함수의 동작은 두 번째 인자로 들어온 반복 가능한 자료형을 첫 번째 인자로 들어온 함수에 하나씩 집어넣어서 함수를 수행하는 함수입니다.
만약에 map함수를 사용하지 않으면 반복문(ex. for반복문)을 이용해서 하나하나 리스트 요소에 접근한 후, 하나씩 계산을 해주어야 하는 번거로움이 있습니다.
※ combinations함수란?
Python에는 순열과 조합을 손쉽게 만들어주는 모듈 itertools가 있습니다.
combinations(객체, r)
반복가능한 객체(리스트, 튜플, 문자열) 안에서 r개를 선택합니다.
사용하기 전에 from itertools import combinations 를 선언해주어야 합니다.
객체가 되며, 경우의 수에 대한 쌍을 튜플형식으로 반환해줍니다.
예시)
from itertools import combinations
arr = ['a','b','c']
for i in combinations(arr, 2):
print(i)
### 실행 결과 ###
('a','b')
('a','c')
('b','c')
코드
from itertools import combinations
def solution(number):
return list(map(sum, combinations(number, 3))).count(0)
1. 조합을 함수화 해놓은 내장함수인 combinations를 이용합니다. number 리스트에서 3명을 추출하겠다는 의미입니다.
2. 추출된 3명의 값이 합산될 수 있도록 sum 함수로 더해주는데 반환이 여러번 되기 때문에 map 함수를 같이 사용하여 반환될 때마다 sum함수로 더해주도록 해주었습니다.
3. 더해진 값들이 여러 개 이므로 list로 감싸주었습니다.
4. 마지막 count(0)을 통해 더해진 세 개의 값이 0인 개수를 카운트해서 값을 return해주도록 해주었습니다.
'Activity > Algorithm' 카테고리의 다른 글
| [코딩 테스트] 파이썬 문자열에서 모음 제거하기(프로그래머스 모음 제거) (0) | 2023.02.19 |
|---|---|
| [코딩 테스트] 프로그래머스_진료 순서 정하기(Python)_sorted, reverse, append (0) | 2023.02.10 |
| [코딩테스트] 프로그래머스_k의 개수(Python) (0) | 2023.02.07 |
| [코딩 테스트] 프로그래머스_OX퀴즈(Python) (0) | 2023.02.06 |
| [코딩 테스트] 프로그래머스-머쓱이보다 키 큰 사람 (0) | 2023.01.30 |