본문 바로가기

프로그래머스

5/28[문제풀이] 프로그래머스 Lv2 타켓 넘버

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

 

문제풀이

 

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
function solution(numbers, target) {
  
    const arr = numbers.slice();
 
    const len = arr.length;
    let result = [];
    let result2 = [0];
 
    let n = 0;
    for (let x = 0; x < len; x++) {
        result = result2;
        result2 = [];
        for (let v of result) {
        result2.push(v + arr[x], v - arr[x]);
        if (x === len -1) {
            if (v + arr[x] === target) {
                n++;
            }
                if (v - arr[x] === target) {
                    n++;
                    }
                }
            }
        }
            return n;
     }
cs

 

이 문제는 for문으로 해당 numbers를 길이만큼 반복하고, 그 안에 for ~ of를 이용해서 해당 숫자들을 +,-를 붙어서 push하며 이렇게 모든 경우의 수를 반복한 후에 마지막 숫자에 도달하면 셈이 끝난 숫자와 타켓을 비교하여 일치하다면 return 값인 n을 더하는 형태로 로직을 작성해주었다.

재귀함수와 dfs를 이용하면 더 효율성이 좋고 간결한 코드가 나올 것 같은데 그렇게 구현하지 못해 아쉽다.