def solution(numbers, target):
answer = DFS(numbers, target, 0)
return answer
def DFS(numbers, target, depth):
answer = 0
if depth == len(numbers):
print(numbers)
if sum(numbers) == target:
return 1
else: return 0
else:
answer += DFS(numbers, target, depth+1)
numbers[depth] *= -1
answer += DFS(numbers, target, depth+1)
return answer
DFS는 깊이우선탐색인데 먼저 왼쪽노드로 가장깊은 끝까지 갔다가
되돌아오면서 깊은곳 우선으로 탐색하는 방법이다
1)DFS 함수 분석
매개변수가 세개 들어있는데
첫번째 매개변수는 dfs의 각 노드의 재료가되는 원본배열이다
두번째 매개변수는 목표숫자로 DFS의 종료조건이 된다
세번째 매개변수는 깊이인데 각 배열에 들어있는 숫자의 인덱스가 되고
배열의 길이와 같아지면 DFS함수의 종료조건이 된다
2)종료조건
어떤상황에서 종료할지 정하는것은 어렵다
DFS함수가 종료되는 조건은
이 문제에 나와있는것 처럼 더하거나 빼서 목표숫자가 되었을때이다
또한 주어진 숫자를 모두 사용하여 깊이가 주어진 숫자의 배열과 같을때로 주면 된다
3)더하고 빼는 방법
깊이우선탐색을 하면서 왼쪽노드는 더하고 오른쪽노드는 뺀다