본문 바로가기
Python 알고리즘 공부/프로그래머스 코딩테스트 연습

삼총사 (python)

by 두 그루 2023. 7. 10.

https://school.programmers.co.kr/learn/courses/30/lessons/131705

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

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

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

 

제한사항

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

code

# Lv.1
# 삼총사
def solution(number):
    length = len(number)
    count = 0
    for i in range(length):
        for j in range(i + 1, length):
            for k in range(j + 1, length):
                if number[i] + number[j] + number[k] == 0:
                    count += 1
    return count

 

알고리즘

number의 원소 중 3개를 더했을 때 0이 되는 횟수를 count 변수에 저장하여 반환한다. 만들어지는 조합 중복 체크를 방지하고자 반복문을 돌 때 index는 위처럼 i의 다음부터, j의 다음부터 확인하는 형태로 설정했다.

 

피드백

def solution (number) :
    from itertools import combinations
    cnt = 0
    for i in combinations(number,3) :
        if sum(i) == 0 :
            cnt += 1
    return cnt

다른 사람의 풀이 중 하나이다. 위는 combination을 활용해 반복문을 1개만 사용하였다.

댓글