NIRVANA

[level 1] 삼총사 본문

Coding test(Python3)/Programmers

[level 1] 삼총사

녜잉 2023. 7. 20. 17:34

문제

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

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

 

문제 풀이 접근법1

1) 배열의 길이 만큼 반복문을 진행 -> 2중 반복문을 사용

2) i와 j를 비교하여 둘이 같지 않다면 sum에 number[j]를 더한 후, count에 1을 더함

3) 만약 sum == 0이고 count == 3이면 answer에 +1을 함

4) 아니라면 j 반복문을 돌기 전 sum을 0으로 초기화 

sum = 0
count = 0
answer = 0



for i in range(len(number)):
    sum = 0
    for j in range(len(number)):
        if i != j:
            sum += number[j]
            count +=1
        
        if sum == 0 and count == 3:
            answer +=1

#print(answer)

였는데...^~^ 지금 answer가 주석 처리 되어 있는 걸 보면 알 수 있듯이

문제가 있다. sum이 0이 되는 지점을 찾을 수 있는데, 어떤 조합인지를 모른다는 문제였다..

근데 진짜 어떻게 풀어야할지 너무 모르겠어서 결국...검색을 함...

 

def solution(number):
    answer = 0
    
    for i in range(len(number)):
        for j in range(i+1, len(number)):
            for k in range(j+1, len(number)):
                sum = number[i]+number[j]+number[k]
        
                if sum == 0:
                    answer+=1
                    
    return answer

배열에 있는 3개의 수를 더했을 때 0이 되는 수를 찾는 것이므로

당연히 for문을 세 번 하면 경우의 수를 찾을 수 있을텐데!!

이걸 왜 생각 못했을까....


 

 

다른 분들 풀이

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

와 파이썬에 조합 라이브러리도 있구만

number에서 3개를 뽑은 순서쌍의 리스트가 생성되고, 해당 값들을 더했을 때 0이되면 count+1을 하면 된다.

좋은 라이브러리인 것 같다!