728x90
깊이 우선 탐색(DFS)으로 목표 값 찾기
이 문제는 주어진 정수 배열 numbers와 목표 값 target을 사용하여 배열의 각 요소를 더하거나 빼는 모든 가능한 방법을 탐색하여 목표 값과 일치하는 경우의 수를 찾는 문제입니다.
문제 풀이
이 문제를 해결하기 위해 DFS(깊이 우선 탐색) 방법을 사용했습니다. 각 숫자를 더하거나 빼는 두 가지 선택지를 재귀적으로 탐색하여 목표 값과 일치하는 경우를 찾습니다.
핵심 포인트
- 재귀 함수 사용: 재귀 함수를 사용하여 모든 가능한 합계를 탐색합니다.
- 기저 사례: 배열의 모든 숫자를 사용한 경우, 현재 합계가 목표 값과 일치하는지 확인합니다.
- 재귀 호출: 각 숫자를 더하거나 뺀 두 가지 경우를 재귀적으로 탐색하여 결과를 합산합니다.
정답은 더보기 클릭
더보기
class Solution {
public int solution(int[] numbers, int target) {
// DFS 탐색을 시작합니다. 초기 호출에서는 인덱스 0과 합계 0을 사용합니다.
return dfs(numbers, 0, 0, target);
}
public int dfs(int[] numbers, int index, int currentSum, int target) {
// 모든 숫자를 다 사용한 경우
if (index == numbers.length) {
// 현재 합계가 목표 값과 일치하는지 확인
return currentSum == target ? 1 : 0;
}
// 현재 인덱스의 숫자를 더하거나 빼는 두 가지 경우의 결과를 재귀적으로 계산하고 합산
return dfs(numbers, index + 1, currentSum + numbers[index], target)
+ dfs(numbers, index + 1, currentSum - numbers[index], target);
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] 멀리뛰기 (0) | 2024.07.12 |
---|---|
[프로그래머스] 의상 (0) | 2024.07.09 |
[프로그래머스] 할인 행사 (0) | 2024.07.04 |
[프로그래머스] 괄호 회전하기 (0) | 2024.07.01 |
[프로그래머스] N개의 최소공배수 (0) | 2024.06.29 |