관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[알고리즘] 프로그래머스 타겟 넘버 -깊이/너비 우선 탐색(DFS/BFS)- 본문

알고리즘/DFS, BFS, 시뮬, 백트래킹

[알고리즘] 프로그래머스 타겟 넘버 -깊이/너비 우선 탐색(DFS/BFS)-

막무가내막내 2020. 5. 16. 23:00
728x90

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+

programmers.co.kr

 

프로그래머스 LEVEL2 의 타겟넘버를 풀어봤습니다. ㅎㅎ

+ 일떄와 - 일때 두가지 경우로 재귀를 돌려 결과값이  타겟넘버라면 개수를 1 증가시키게 풀었습니다.

 

문제풀이는 다음과 같습니다.

 

[Java]

class Solution {
    private static int target;
    private static int size;
    private static int answer = 0;
    private static int[] numbers;

    public static void dfs(int n, int count) {
        if (count == size-1) {
            if (n == target) {
                answer++;
            }
        } else {
            dfs(n + numbers[count+1], count + 1);
            dfs(n + (numbers[count+1]*-1), count + 1);
        }
    }

    public int solution(int[] numbers, int target) {
        size = numbers.length; //5
        Solution.target = target; //3
        Solution.numbers = numbers;
        dfs(numbers[0], 0); // 1
        dfs(numbers[0]*-1, 0); // -1
        return answer;
    }
}

 

[Kotlin]

    internal class Solution {

        fun solution(numbers: IntArray, target: Int): Int {
            size = numbers.size //5
            Solution.target = target //3
            Solution.numbers = numbers
            dfs(numbers[0], 0) // 1
            dfs(numbers[0] * -1, 0) // -1
            return answer
        }

        companion object {
            private var target: Int = 0
            private var size: Int = 0
            private var answer = 0
            private var numbers: IntArray? = null

            fun dfs(n: Int, count: Int) {
                if (count == size - 1) {
                    if (n == target) {
                        answer++
                    }
                } else {
                    dfs(n + numbers!![count + 1], count + 1)
                    dfs(n + numbers!![count + 1] * -1, count + 1)
                }
            }
        }
    }
728x90
Comments