단순히 dfs 백트랙킹으로 구현하면 되는 문제이다.
모든 경우의 수를 계산하면 풀 수 있는 문제이다.
파이썬으로 문제를 풀어봤다. syntax를 제외하고는 사고대로 구현할 수 있는 거 같아 재밌었다.
plusMinus = [1,-1]
stack = []
result = 0
def check(target):
global stack
temp = 0
for i in stack:
temp += i
if temp == target:
return True
else:
return False
def dfs(cnt, numbers, target):
global stack
global result
global plusMinus
if cnt == len(numbers):
if check(target):
result += 1
else:
for i in plusMinus:
stack.append(i* numbers[cnt])
dfs(cnt + 1, numbers, target)
stack.pop()
def solution(numbers, target):
dfs(0,numbers, target)
global result
answer = result
return answer