📌 문제
🌞 정답 코드
class Solution {
int answer = 0, sum = 0;
public void dfs(int[] numbers, int target, int index, int sum){
index++;
if (index==numbers.length){
if(sum==target) answer++;
return;
}
else {
dfs(numbers, target, index, sum+numbers[index]);
dfs(numbers, target, index, sum-numbers[index]);
}
}
public int solution(int[] numbers, int target) {
dfs(numbers, target, -1, 0);
return answer;
}
}
✅ dfs 메서드에 따른 변수의 변화
예시: numbers = [1, 2, 3], target = 3
- 초기 호출
- dfs(numbers, target, -1, 0)
- 상태:
- index = -1
- sum = 0
- answer = 0
- 첫 번째 dfs 단계
- index++ → index = 0
- 호출 : dfs(numbers, target, 0, 0+1)
- 상태:
- index = 0
- sum = 1
- 두 번째 dfs 단계
- index++ → index = 1
- 호출 : dfs(numbers, target, 1, 1+2)
- 상태 :
- index = 1
- sum = 3
- 세 번째 dfs 단계
- index++ → index = 2
- 호출 : dfs(numbers, target, 2, 3+3)
- 상태:
- index = 2
- sum = 6
- 기저 조건 확인: sum == target → answer++ (answer = 1)
- 네 번째 DFS 단계 (모든 숫자를 사용한 상태)
- index++ → index = 3
- 호출 : dfs(numbers, target, 3, 6)
- 상태 :
- index = 3
- sum = 6
- 기저 조건 확인: sum != target → answer = 0
- 돌아가기 : 세 번째 dfs 단계로
- 호출 : dfs(numbers, target, 2, 3-3)
- 상태:
- index = 2
- sum = 0
- 네 번째 dfs 단계 (모든 숫자를 사용한 상태)
- index++ → index = 3
- 호출 : dfs(numbers, target, 2, 0)
- 상태:
- index = 3
- sum = 0
- 기저 조건 확인: sum != target → answer = 0
- 돌아가기 : 두 번째 dfs 단계로
- 호출 : dfs(numbers, target, 1, 1 - 2)
- 상태:
- index = 1
- sum = -1
- 세 번째 dfs 단계
- index++ → index = 2
- 호출 : dfs(numbers, target, 2, -1 + 3)
- 상태:
- index = 2
- sum = 2
- 네 번째 dfs 단계 (모든 숫자를 사용한 상태)
- index++ → index = 3
- 호출 : dfs(numbers, target, 3, 2)
- 상태:
- index = 3
- sum = 2
- 기저 조건 확인: sum != target → answer = 0
- 돌아가기 : 첫 번째 dfs 단계로
- 호출 : dfs(numbers, target, 0, 0 - 1)
- 상태:
- index = 0
- sum = -1
- 첫 번째 dfs 단계
- index++ → index = 1
- 호출 : dfs(numbers, target, 1, -1+2)
- 상태:
- index = 1
- sum = 1
'코딩 테스트 일지 📒' 카테고리의 다른 글
[백준]1697 숨바꼭질 | 그래프, BFS | 실버 Ⅰ | JAVA (0) | 2024.10.10 |
---|---|
[알고리즘] DFS와 BFS (2) | 2024.10.10 |
[프로그래머스] 네트워크 | DFS, BFS | Level.3 | JAVA (0) | 2024.10.08 |
[백준] 2751 수 정렬하기 2 | 정렬 | 실버 Ⅴ | JAVA 💡계수 정렬 (0) | 2024.10.08 |
[백준] 1181 단어 정렬 | 문자열, 정렬 | 실버 Ⅴ | JAVA 💡Arrays.sort (0) | 2024.10.07 |