삼총사

NJW·2023년 3월 20일
0

코테

목록 보기
137/170

문제 설명

숫자가 들어간 배열이 주어지는데 여기에서 숫자 세 개를 뽑아서 0이 되는 경우의 수를 구하는 문제다.

문제 풀이

첫 번째 접근

깊이 우선 탐색으로 숫자 세 개를 골라서 더한 다음에 0을 확인하는 방법으로 접근했다. 그러나 여기서 문제가 발생했는데, 숫자가 같고 순서가 다르면 서로 다른 값으로 인식해서 중복되는 값이 세진다는 것이다.

이걸 어떻게 해결해야 하지 고민하던 순간 파이썬에는 조합 모듈이 존재함을 떠올렸다.

두 번째 접근

조합 모듈 itertools.combinations을 이용했다. 먼저 조합을 만들고 해당 조합을 전부 더해서 0이 나오면 answer의 값을 하나 올려주는 방식이다.

코드

import itertools

def solution(number):

    nCr = itertools.combinations(number, 3)
    answer = 0
    for l in list(nCr):
        tmp = 0
        for s in l:
            tmp = tmp + s

        if tmp == 0:
            answer = 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

https://school.programmers.co.kr/learn/courses/30/lessons/131705/solution_groups?language=python3&type=all

profile
https://jiwonna52.tistory.com/

0개의 댓글