DFS/BFS 문제 유형의 한 문제입니다.
왜 우선 탐색 문제일까 고민하던 중에 스터디원이 준 힌트를 듣고 풀이 방법을 알아냈습니다.
트리로 보면 리프 노드를 구한다음 타깃과 같은 값을 가진 노드의 개수를 구하면 됩니다.
아래의 그림처럼 생각할 수 있습니다.
예를 들어 배열로 [4, 1, 2, 1]이 들어오고 타겟 넘버가 4일 경우의 수는 두 가지입니다.
import java.util.*;
class Solution {
public int solution(int[] numbers, int target) {
int answer = 0;
Queue<Integer> answerList = new LinkedList<Integer>();
answerList.add(0);
for(int i: numbers){
int size = answerList.size();
for(int k = 0; k < size; k++){
int pop = answerList.poll();
answerList.add(pop + i);
answerList.add(pop - i);
}
}
for(int i :answerList){
if(i == target){
answer += 1;
}
}
return answer;
}
}
그래프를 그리면서 탐색할 Queue를 하나 만들어 주고 루트 노드로 0을 넣어줬습니다.
이후로는 해당 레벨의 갯수 만큼 반복하며 하위 노드를 만들고 부모 노드를 삭제하는 것을 반복합니다.
마지막에는 큐에 리프 노드의 숫자들만 남게 됩니다.
'Algorithm > Java 풀이' 카테고리의 다른 글
[프로그래머스] 베스트앨범 자바 풀이 (0) | 2022.10.02 |
---|---|
프로그래머스 폰켓몬 java 풀이 (0) | 2022.09.28 |
프로그래머스 프린터 자바 풀이 (0) | 2022.09.23 |
프로그래머스 같은 숫자는 싫어 자바풀이 (1) | 2022.09.23 |
프로그래머스 K번째 수 Java풀이 (0) | 2022.09.14 |