[프로그래머스/43165] 타겟 넘버
in Study / Coding Test
☑️ 문제
☑️ 풀이
문제 분석
numbers배열에서 각 숫자에+,-를 붙여 모든 경우의 수를 탐색해야한다.- 결과적으로
target이 되는 경우의 수를 구해야 한다.
접근 방법
- 각 숫자마다
+또는-를 붙일 수 있으므로 완전 탐색을 해서n * n개의 경우의 수를 확인해야 한다. DFS를 활용할 수 있다.
풀이
//시간: 4.60ms
//메모리: 83.6MB
class Solution {
static int answer = 0;
static int target;
public int solution(int[] numbers, int target) {
this.target = target;
dfs(numbers, 0, 0);
return answer;
}
public void dfs(int[] numbers, int idx, int sum) {
if (idx > numbers.length - 1) {
if (sum == target) {
answer += 1;
}
return;
}
dfs(numbers, idx + 1, sum + numbers[idx]);
dfs(numbers, idx + 1, sum - numbers[idx]);
}
}
idx가numbers.length - 1과 같거나 더 커진 경우sum과target이 일치한 지 확인한다.- 현재 숫자를 더하는 경우와 현재 숫자를 빼는 경우 두 가지로
dfs메서드를 재귀적으로 호출한다.