문제
문제 풀이
문제자체는 그렇게 어렵지 않은 문제이긴 했으나, dfs를 구현하는 방법을 어떻게 할 지에 대한 고민을 많이 했던 문제이다.
배열로 받은 값을 +로 더해보고 -로 빼야하는 모든 경우의 수를 생각해봐야 하기 때문에 재귀함수로 +, - 값을 계산하도록 해야 한다.
그리고 idx 가 배열의 끝까지 도달 했을 때, 그 때의 합이 target과 같다면 answer + 1 해주면 된다.
나의 답안
class Solution {
static int answer = 0;
public int solution(int[] numbers, int target) {
dfs(numbers, target, 0, 0);
return answer;
}
private void dfs(int[] numbers, int target, int idx, int sum) {
if (idx == numbers.length) {
if (sum == target) {
answer++;
}
return;
}
dfs(numbers, target, idx + 1, sum + numbers[idx]);
dfs(numbers, target, idx + 1, sum - numbers[idx]);
}
}
'Programmers 문제풀이 > Lv.2' 카테고리의 다른 글
k진수에서 소수 개수 구하기 (0) | 2023.04.03 |
---|---|
전화번호 목록 (0) | 2023.04.03 |
[1차] 뉴스 클러스터링 (0) | 2023.04.03 |
연속 부분 수열 합의 개수 (0) | 2023.04.03 |
n^2 배열 자르기 (0) | 2023.04.02 |