ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

[๋ฌธ์ œ]

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

[ํ’€์ด]

๋Œ€ํ‘œ์ ์ธ DFS ๋ฌธ์ œ๋กœ ๋‘๊ฐ€์ง€ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

  • + ์—ฐ์‚ฐ์„ ํ•ด์ฃผ๊ณ  ๋‹ค์Œ index๋กœ ์ด๋™
  • - ์—ฐ์‚ฐ์„ ํ•ด์ฃผ๊ณ  ๋‹ค์Œ index๋กœ ์ด๋™

 

ํ˜„์žฌ ๊ณ„์‚ฐ์ค‘์ธ numbers์˜ index๋ฅผ dfs ํ•จ์ˆ˜์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ด ๋งŒ์•ฝ ๋ชจ๋“  ์ˆซ์ž๊ฐ€ ์—ฐ์‚ฐ์ด ์™„๋ฃŒ๋˜๋ฉด, ์ฆ‰ index๊ฐ€ numbers.length์™€ ๊ฐ™์•„์ง€๋ฉด dfs ํ•จ์ˆ˜๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ 1๋ฒˆ์˜ ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฐ์‚ฐ์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

                               [1 + 1 , 1 - 1]

         [1 + 1 + 1, 1 + 1 - 1]   [1 - 1 + 1, 1 - 1 - 1]

                                        ...

 

[์ฝ”๋“œ]

function solution(numbers, target) {
    var answer = 0;
    
    const dfs = (ret, i) => {
        if(i === numbers.length) {
            if(target === ret) {
                answer++;
            }
            return;
        }
        dfs(ret + numbers[i], i + 1);
        dfs(ret - numbers[i], i + 1);
    }
    
    dfs(0,0);
    
    return answer;
}