[알고리즘] 프로그래머스 - 타겟넘버

do_large·2020년 12월 28일
0

알고리즘

목록 보기
28/50
post-thumbnail

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

문제설명
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이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.

풀이방법
1. 더하기와 빼기를 랜덤하게 구현할수 있는 방법을 생각해봄!
2. 재귀함수를 사용해서 더하기인 경우, 빼기인 경우를 모두 호출함.
3. getAnswer함수(getAnswer함수 밖)를 두 번 호출한 이유는 0번째 index값이 마이너스인경우도 생각해줘야하기때문에!

function solution(numbers, target) {
    let count = 0;
  
    function getAnswer(cur, isPositive, index){
        isPositive ? cur+=numbers[index] : cur-=numbers[index];
        if(index === numbers.length-1){
            if(cur === target){
                count++;
            }
            return;
        }
        getAnswer(cur, true, index+1);
        getAnswer(cur, false, index+1);

    }    
    
    getAnswer(0, true, 0);
    getAnswer(0, false, 0);
    
    return count;
}

0개의 댓글