+
, -
를 배열에 담아서 반복문에 돌릴 수 있나?def solution(numbers, target):
# 트리의 첫 번째 층에는 0
tree = [0]
# 매개변수로 받은 숫자 목록을 하나씩 꺼내와 주는 역할
for num in numbers:
sub_tree = []
# 노드 하나하나에 숫자를 더하고 빼주어 자식 노드들을 생성하는 역할
for tree_num in tree:
sub_tree.append(tree_num + num)
sub_tree.append(tree_num - num)
tree = sub_tree
return tree.count(target)
트리를 한층 한층 밑으로 만들어 나가는 것 = 한 노드에 숫자를 빼고 더한 결과를 자식 노드로 쌓는다.
tree는 이전 수에 대한 계산 결과를 담은 층을 가지고 있고, sub_tree는 현재 숫자에 대한 결과를 담은 자식 노드를 하나씩 추가하는 역할을 한다.
answer = 0
def dfs(numbers, target, idx, total):
global answer
if idx == len(numbers):
if target == total:
answer += 1
return
dfs(numbers, target, idx + 1, total + numbers[idx])
dfs(numbers, target, idx + 1, total - numbers[idx])
def solution(numbers, target):
global answer
dfs(numbers, target, 0, 0)
return answer
+
,-
해준 값을 array
에 넣어준다.for
문의 범위를 보면 idx
는 그 전에 추가된 값들의 위치array
배열에서 numbers
의 마지막 결과 값들 중에서 target
인 것들을 count
-
를 붙임def solution(numbers, target):
array = [0]
idx = 0
for i in numbers:
for j in range(idx, len(array)):
array.append(array[j]+i)
array.append(array[j]-i)
idx = idx * 2 + 1
return array[-(2**len(numbers)):].count(target)
출처
https://jiss02.tistory.com/18
https://johnyejin.tistory.com/60