티스토리 뷰

https://programmers.co.kr/learn/courses/30/lessons/43165?language=java

 

코딩테스트 연습 - 타겟 넘버 | 프로그래머스

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘

programmers.co.kr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
    static int answer = 0;
    
    public int solution(int[] numbers, int target) {
       dfs(numbers, target, 0);
        return answer;
    }
 
    public static void dfs(int[] numbers, int target, int node) {
        if(node == numbers.length) {
            int sum = 0;
            for(int num : numbers) {
                sum += num;
            }
            if(sum == target) {
                answer++;
            }
        } else {
            numbers[node] *= 1;
            dfs(numbers, target, node+1);
 
            numbers[node] *= -1;
            dfs(numbers, target, node+1);
        }
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

DFS, BFS에 대한 개념을 먼저 익히고 푸는게 좋은듯 싶다

(라고 상상함 하지만 어림도 없지ㅋㅋ 좀 더 익숙해지는 연습을 해야겠다...)

DFS, BFS를 한방에 이해하는 짤

DFS는 stack, 재귀함수로 구현할 수 있고,

BFS는 queue로 구현 가능하다

이제 저걸 코드로 풀어서 응용만 하면 되는데 쉽지 않았다 (뇌굳남, 뇌가 굳어버린 남자)

1) DFS를 활용해 해당 node의 숫자를 (+), (-)로 배열에 넣어준다. (Tree로 보면 한쪽엔 (+), 다른쪽엔 (-))

2) node가 해당 배열까지 탐색했다면, numbers 배열을 다 더한다.

3) target과 비교해서 일치하면 카운트 +1, 아니면 다시 탐색 후 반복

댓글