class Solution {
int answer; // 정답을 저장할 변수
public int solution(int[] numbers, int target) {
answer = 0; // 그릇
dfs(0, 0, numbers, target); // DFS 알고리즘 실행
return answer; // 결과 반환
}
void dfs(int n, int sum, int[] numbers, int target) {
// 1. 탈출 조건: 모든 숫자를 더하거나 빼서 target을 만든 경우
if(n == numbers.length) {
if(sum == target)
answer++; // 정답 수 증가
return; // 리턴하여 호출한 함수로 돌아감
}
// 2. 수행 동작: 현재 위치의 수를 더하거나 빼는 두 가지 경우를 모두 재귀호출함
dfs(n + 1, sum + numbers[n], numbers, target); // 현재 위치의 수를 더한 경우
dfs(n + 1, sum - numbers[n], numbers, target); // 현재 위치의 수를 뺀 경우
}
}