-
여기서 dfs함수는 방법의 수를 리턴
public class TargetNumber { public int solution(int[] numbers, int target) { return dfs(numbers, target, 0, 0); } private int dfs(int[] numbers, int target, int index, int currentSum) { // base case: 모든 숫자를 다 사용한 경우 if (index == numbers.length) { // 현재 합이 타겟 넘버와 같으면 1을 반환 (방법의 수 1개 추가) return currentSum == target ? 1 : 0; } // 현재 숫자를 더한 경우와 뺀 경우를 각각 재귀적으로 탐색 int add = dfs(numbers, target, index + 1, currentSum + numbers[index]); int subtract = dfs(numbers, target, index + 1, currentSum - numbers[index]); // 두 경우의 합이 현재 숫자를 처리한 결과 return add + subtract; } public static void main(String[] args) { TargetNumber targetNumber = new TargetNumber(); int[] numbers = {1, 1, 1, 1, 1}; int target = 3; System.out.println(targetNumber.solution(numbers, target)); // Output: 5 } }
'알고리즘' 카테고리의 다른 글
백준 풀이 : 동전 1 - 2293번 (2) 2024.10.06 [99클럽 코테 스터디 2일차 TIL] JAVA 배열의 최대공약수(gcd), 최소공배수(lcm) 구하기 (3) 2024.07.23 정렬 (1) 2024.04.04 합병 정렬 (0) 2024.02.27 bfs - 너비 우선 탐색 (2) 2024.02.20