🙋🏻♀️ DFS 사용!
구현으로 풀 듯이 하려다가, 이게 DFS/BFS 유형인걸 알고 풀었기때문에 어떻게 사용될지를 생각해봤다.
금방 DFS 라는것은 알 수 있었으나, 재귀적으로 어떻게 호출해야할지 감이 안왔다.
class Solution {
static int answer;
public int solution(int[] numbers, int target) {
dfs(numbers, target, 0, 0);
return answer;
}
public void dfs(int[] numbers, int target, int depth, int sum) {
if(depth == numbers.length) {
if(sum == target) answer++;
} else {
dfs(numbers, target, depth+1, sum+numbers[depth]);
dfs(numbers, target, depth+1, sum-numbers[depth]);
}
}
}
그리고 다른 풀이를 찾아봤다.
class Solution {
public int solution(int[] numbers, int target) {
int answer = 0;
answer = dfs(numbers, 0, 0, target);
return answer;
}
int dfs(int[] numbers, int n, int sum, int target) {
if(n == numbers.length) {
if(sum == target) {
return 1;
}
return 0;
}
return dfs(numbers, n + 1, sum + numbers[n], target) + dfs(numbers, n + 1, sum - numbers[n], target);
}
}
Queue로도 가능하다
import java.util.LinkedList;
import java.util.Queue;
class Solution {
Queue<Integer> q = new LinkedList<Integer>();
public int solution(int[] numbers, int target) {
int answer = 0;
q.offer(0);
q.offer(0);
while(q.peek()!=null){
int level =q.poll();
int v = q.poll();
if(level==numbers.length){
if(v==target)
answer++;
}else {
q.offer(level + 1);
q.offer(v + numbers[level]);
q.offer(level + 1);
q.offer(v - numbers[level]);
}
}
return answer;
}
}