유형 : 구현.

ㅏ하하

 

1. 나의 풀이 : 요상한 재귀,

def solution(number):
    answer = rec(0, number, 0)
    return answer/6

def rec(itern, number, res):
    if itern == 3:
        if res == 0:
            return 1
        else:
            return 0
    ans = []
    for i in range(len(number)):
        new = number.copy()
        curr = new.pop(i)
        ans.append(rec(itern + 1, new, res + curr))
    return sum(ans)

 

1, 2, 3 tuple의 조합 6개가 각각 count되어서 나누기 6을 해야 정답이 나오는 요상한 코드이다.

뭔가 굉장히 맘에 안든다. 

그치만 일단 맞았으님...

숫자제한이 작고 recursion depth 제한이 있어서 그나마 통과가 된 것 같다. 

 

2. itertools - combinations 사용

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

 

이렇게 제한 숫자가 크지않은 문제의 경우 그냥 itertools로 순열 전체를 구한 뒤에 푸는 것도 방법이다. 

복사했습니다!