n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
| numbers | target | return |
|---|---|---|
| [1,1,1,1,1] | 3 | 5 |
| [4,1,2,1] | 4 | 2 |
[1,1,1,1,1]
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
function solution(numbers, target) {
let answer = 0;
const length = numbers.length;
function DFS(L, sum) {
if (L === length) {
if (sum === target) {
answer++;
}
} else {
DFS(L + 1, sum + numbers[L]);
DFS(L + 1, sum - numbers[L]);
}
}
DFS(0, 0);
return answer;
}
DFS의 첫 번째 if문은 재귀를 멈추는 조건문으로 모든 값(모든 레벨L)을 더 했을때 sum의 값이 target값과 같은 경우 answer의 값을 카운팅해준다.DFS(L + 1, sum + numbers[L]); 와 DFS(L + 1, sum - numbers[L]); 는 처음 DFS로 진입해 모든 레벨들을 더하고 난 뒤 다음 DFS로 진입해 모든 레벨에 한 번씩 빼는 재귀를 반복해준다.[1,1,1,1,1]
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3