프로그래머스 삼총사

프로그래머스 코딩테스트 삼총사

문제

한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서 두 가지 방법으로 삼총사를 만들 수 잇습니다.

한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 잇는 방법의 수를 return 하도록 solution 함수를 완성하세요.

제한사항

  • 3 <= number의 길이 <= 13
  • -1,000 <= number의 각 원소 <= 1,000
  • 서로 다른 학생의 정수 번호가 같을 수 있습니다.

입출력 예

tresult
[-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

  • 삼총사가 될 수 있는 방법이 없습니다.

풀이

from itertools import combinations

def solution(number):
    answer = 0
    number.sort()
    for i in combinations(number, 3):
        if sum(i) == 0:
            answer += 1
    return answer

itertools 모듈은 파이썬의 표준 라이브러리 중 하나로, 반복 가능한 데이터의 조합이나 순열, 그룹화 등을 쉽게 처리할 수 있도록 도와주는 다양한 함수를 제공한다.

combinations 함수는 itertools 모듈에 포함된 함수 중 하나로 입력된 반복 가능한 데이터에서 지정된 개수만큼의 원소를 선택하여 모든 가능한 조합을 생성해준다.

예를 들어, 다음과 같이 사용할 수 있다.

from itertools import combinations

data = [1, 2, 3, 4]
combs = combinations(data, 2)

for comb in combs:
  print(comb)

위 코드를 실행하면 다음과 같은 결과가 출력된다.

(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)

이처럼 combinations 함수를 사용하면 입력된 데이터에서 원하는 개수만큼의 원소를 선택하여 가능한 모든 조합을 쉽게 생성할 수 있다.

* TOC {:toc}

© 2021. All rights reserved.