https://programmers.co.kr/learn/courses/30/lessons/43165
코딩테스트 연습 - 타겟 넘버
n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수
programmers.co.kr
DFS (깊이 우선 탐색)을 이용하여 음수 양수의 경우를 고려해 그래프 탐색을 해주면 됩니다.
- 시작점을 0으로한 dfs 시작
- 만약 리프 노드가 아니라면 idx+1을 해주고, 현재 노드의 값과 누적 합계를 더한다.
- 음수 양수 dfs를 돌려준다.
- 만약 리프 노드이면서 찾으려는 값을 찾았다면 count 값을 증가 한다.
- dfs가 종료 되고 나면 찾으려는 값 만큼 count 되어 있으므로 return 한다.
class Solution {
int count;
public int solution(int[] numbers, int target) {
dfs(0,target, 0, numbers);
return this.count;
}
public void dfs(int idx,int target, int sum, int[] numbers){
if(idx == numbers.length){
if(sum == target) this.count++;
return;
}
dfs(idx + 1, target, sum + numbers[idx],numbers);
dfs(idx + 1, target, sum - numbers[idx],numbers);
}
}
'PS > programmers' 카테고리의 다른 글
Programmers - 피로도 (Java) 완전탐색 (0) | 2022.08.10 |
---|---|
[프로그래머스] 기능개발 (1) | 2022.06.27 |
프로그래머스 두 개 뽑아서 더하기 (0) | 2022.06.27 |
프로그래머스 실패율 (0) | 2022.06.27 |
프로그래머스 1차 다트 게임 (0) | 2022.06.27 |