처음에는 여태 백준문제 풀면서 했던 것처럼 그래프를 만들어서 탐색해야하나 고민했는데, 어떻게 그래프를 생성해야 할지도 감이 안 잡혀서 그냥 배열 안에서 탐색하는 방식으로 구현해보려다가 성공했다. 희희
알고리즘 문제 풀 때 너무 전형적인 풀이에 사로잡히지 말고, 백지 상태에서 어떻게 접근해서 풀면 좋을지 스스로 생각해내는 게 중요한 것 같다. 내가 생각해낸 방법은 기본적으로 아래와 같다.
numbers
배열을 순차적으로 탐색하면서 2가지 경우로 분기한다.numbers
배열의 끝에 도달했을 때의 result
를 target
과 비교해서 count
를 증가시킨다.계산 결과값을 별도의 변수에 저장해야하나 싶었는데, 그냥 재귀로 호출할 때마다 파라미터로 넘겨주는 방식으로 훨씬 편하게 성공할 수 있었다.
class Solution {
private static int count;
public int solution(int[] numbers, int target) {
dfs(numbers, 0, 0, target);
return count;
}
private void dfs(int[] numbers, int index, int result, int target) {
if (index == numbers.length) {
if (result == target) count++;
return;
}
dfs(numbers, index + 1, result + numbers[index], target);
dfs(numbers, index + 1, result - numbers[index], target);
}
}
static 변수 없이 재귀로만 더 간단하게 풀었다.
class Solution {
public int solution(int[] numbers, int target) {
return dfs(numbers, 0, 0, target);
}
private int dfs(int[] numbers, int index, int value, int target) {
if (index == numbers.length) {
if (value == target) return 1;
else return 0;
}
return dfs(numbers, index+1, value+numbers[index], target)
+ dfs(numbers, index+1, value-numbers[index], target);
}
}