[python_파이썬_pass_복습]프로그래머스_LV1_삼총사_풀이

2024. 5. 8. 21:15코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/kdCOczz1e9c?feature=shared

 

조합의 의미만 알면 쉽게 풀 수 있다.

세명의 조합을 뽑아내서 합이 0이면 cnt += 1을 해주면 통과.

 

<첫번째 시도 : 통과>

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

 

<두번째 시도 : 통과>

combinations와 동일한 조건을 주는 삼중for문 연습용.

첫번째 for문은 0~-2, 두번째는 1~-1, 세번째는 2~0 이런 조건이다.

즉 out of range가 되지 않기 위해 for문에 -2, -1을 해주는건데 반대로 -2, -1를 해주지 않았을 경우

len(numbers) = 4라면 i = 0, 1, 2가 나올텐데 여기서 2의 경우 j = 3, k = 4가 나온다.

만약 i가 3이상이 되면 k에서 out of range가 발생한다.

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

 

<다른사람풀이 참고>

거의 대부분 나랑 비슷하게 풀었음

 

dfs로 처리한 사람이 있네... 이거 나중에 분석해봐야 겠음.

def solution(number):
    tot = 0
    def dfs(i, cnt, sum_num):
        nonlocal tot

        if cnt == 3 and not sum_num:
            tot += 1
            return

        if i == len(number):
            return

        if cnt < 3:
            dfs(i+1, cnt+1, sum_num + number[i])
            dfs(i+1, cnt, sum_num)

    dfs(0,0,0)        

    answer = tot


    return answer
728x90
반응형