출처: https://bumcrush.tistory.com/182 [맑음때때로 겨울]
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/43165

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

package Programmers;

import java.util.Arrays;

public class 타겟넘버 {

    static int[] combArr = {1, -1};
    static int[] chMap;
    static int tempAnswer;
    public static void main(String[] args){
        타겟넘버 T = new 타겟넘버();
        int[] numbers = {1, 1, 1, 1, 1};
        int target = 3;
        T.solution(numbers, target);
    }

    public int solution(int[] numbers, int target) {
        chMap = new int[numbers.length];
        tempAnswer = 0;
        dfs(0, numbers, target, new int[numbers.length]);
        return tempAnswer;
    }
    public void dfs(int L, int[] numbers, int target, int[] myArr){
        if(L == numbers.length){
            int sum = Arrays.stream(myArr).sum();
            if(sum == target) tempAnswer++;
            return;
        }else{
            for (int i = 0; i < combArr.length; i++) {
                myArr[L] = combArr[i] * numbers[L];
                dfs(L + 1, numbers, target, myArr);
            }
        }
    }
}

 

1. 풀이 

   1.1 ) combArr 에  [-1, 1] 들어있는 배열을 만든다.

   1.2 ) dfs 를 돌면서 myArr을 만든다. 

           -> 기존 numbers 조합배열에 combArr 을 곱한조합의 배열 

                넣게되면 배열은 -1, 1 을 곱한 numbers 의 모든 조합의 수를 구할수가있음 

   1.3 ) L 은 DFS의 레벨값이다. 레벨값이 numbers 배열의 길이와 같다면 구해진 myArr조합의 합을 구해 target과 같은지 비교하고 

           같다면 answer에 +1 을 해준다.

반응형

+ Recent posts