각 원소마다 +/-를 모두 적용해본 뒤 그 결과값을 target과 비교해야 하므로 디큐를 활용하면 편리하다. 첫 번째 즉 idx=0 원소에 +/-를 적용해 디큐에 넣고 디큐가 빌 때까지 idx를 하나씩 추가해 주어진 numbers 리스트의 끝에 도달할 때까지 넣고/빼기를 반복한다. 이런 유형을 접했을 때 자연스럽게 DFS → 디큐 등을 떠올릴 수 있도록 익숙해지자!
from collections import deque
def solution(numbers, target):
answer = 0
queue = deque()
n = len(numbers)
queue.append([numbers[0], 0])
queue.append([-1*numbers[0], 0])
while queue:
total, idx = queue.popleft()
idx += 1
if idx<n:
queue.append([total+numbers[idx], idx])
queue.append([total-numbers[idx], idx])
else:
if total == target: answer += 1
return answer