최대 1 분 소요

사용 언어: Python3

문제

스크린샷 2023-05-18 오후 8 27 14

풀이

내 풀이

def DFS(idx, pSum):
    if idx == K:
        if 0 < pSum <= S and visited[pSum] != 1:
            visited[pSum] = 1
    else:
        DFS(idx + 1, pSum) # 사용 X
        DFS(idx + 1, pSum + lst[idx]) # 더하거나
        DFS(idx + 1, pSum - lst[idx]) # 빼거나

K = int(input())
lst = list(map(int, input().split()))

S = sum(lst)
visited = [0] * (S+1)

DFS(0, 0)
print(visited.count(0) - 1) # ✅ 0번 인덱스 제외
  • 정답!
  • 각각의 추를 사용하거나(더하거나 빼거나), 사용하지 않거나 -> 총 3가지 경우로 나눠서 DFS를 돌리면 된다.
    • 뺀다는 것은 물 그릇과 같은 쪽에 추를 놓는 경우이다.

다른 풀이 - set 자료구조 활용

def DFS(idx, pSum):
    if idx == K:
        if 0 < pSum <= S:
            res.add(pSum) # ✅ set에 add
    else:
        DFS(idx + 1, pSum) # 사용 X
        DFS(idx + 1, pSum + lst[idx]) # 더하거나
        DFS(idx + 1, pSum - lst[idx]) # 빼거나

K = int(input())
lst = list(map(int, input().split()))

S = sum(lst)
res = set() # ✅ set 자료구조

DFS(0, 0)
print(S - len(res))


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기