Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[JavaScript/section 8] 05 - ํ•ฉ์ด ๊ฐ™์€ ๋ถ€๋ถ„์ง‘ํ•ฉ

_์„ฑํ˜ธ_ 2022. 10. 21. 12:48
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 05 - ํ•ฉ์ด ๊ฐ™์€ ๋ถ€๋ถ„์ง‘ํ•ฉ(DFS : ์•„๋งˆ์กด ์ธํ„ฐ๋ทฐ)

N๊ฐœ์˜ ์›์†Œ๋กœ ๊ตฌ์„ฑ๋œ ์ž์—ฐ์ˆ˜ ์ง‘ํ•ฉ์ด ์ฃผ์–ด์ง€๋ฉด, ์ด ์ง‘ํ•ฉ์„ ๋‘ ๊ฐœ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ๋‘ ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ์›์†Œ์˜ ํ•ฉ์ด ์„œ๋กœ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜๋ฉด "YES"๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด "NO"๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋‘˜๋กœ ๋‚˜๋‰˜๋Š” ๋‘ ๋ถ€๋ถ„์ง‘ํ•ฉ์€ ์„œ๋กœ์†Œ ์ง‘ํ•ฉ์ด๋ฉฐ, ๋‘ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ํ•ฉํ•˜๋ฉด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์›๋ž˜์˜ ์ง‘ํ•ฉ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ‘ ํ’€์ด ๋ฐฉ๋ฒ•

๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ ๋ฌธ์ œ์˜ ํ’€์ด ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๊ฐ€๋ฉด์„œ ์ดํ•ด๋ฅผ ํ–ˆ๋‹ค๋ฉด ์–ด๋ ต์ง€ ์•Š์€ ๋ฌธ์ œ์ด๋‹ค. ์ด๋ฒˆ ๋ฌธ์ œ ๋˜ํ•œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋ฉด์„œ ์ดํ•ด๋ฅผ ํ•˜์˜€๋‹ค.

  • ๋ฐฐ์—ด ์š”์†Œ๋“ค์˜ ์ด ํ•ฉ(total)์„ ๊ตฌํ•œ๋‹ค.
  • ์žฌ๊ท€๋ฅผ ๋Œ๋‹ค๊ฐ€ ํƒ์ƒ‰ํ•˜๊ณ  ์žˆ๋Š” idx๊ฐ€ ๋ฐฐ์—ด์˜ ๊ธธ์ด์™€ ๊ฐ™๋‹ค๋ฉด ์ด ํ•ฉ์—์„œ sum(๋ถ€๋ถ„ ์ง‘ํ•ฉ์˜ ํ•ฉ)์„ ๋บ€ ๊ฐ’์ด sum๊ณผ ๊ฐ™์€์ง€ ๋น„๊ตํ•œ๋‹ค.
  • ๊ฐ™์€ ๊ฒฝ์šฐ answer ๋ณ€์ˆ˜์— 'YES', flag(ํƒ์ƒ‰์„ ๋ฉˆ์ถ”๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜) ๋ณ€์ˆ˜์— 1์„ ์žฌํ• ๋‹นํ•ด์ค€๋‹ค.

 

๐Ÿ“ ์†Œ์Šค ์ฝ”๋“œ

function solution(arr) {
  let answer = 'NO';
  flag = 0;
  let total = arr.reduce((a, b) => a + b);
  let len = arr.length;

  function DFS(idx, sum) {
    if (flag) return;
    if (idx === len) {
      if (total - sum === sum) {
        answer = 'YES';
        flag = 1;
      }
    } else {
      //   sum += arr[idx];
      DFS(idx + 1, sum + arr[idx]);
      //   sum -= arr[idx];
      DFS(idx + 1, sum);
    }
  }
  DFS(0, 0);
  return answer;
}

let arr = [1, 3, 5, 6, 7, 10];
console.log(solution(arr));