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

[JavaScript/section 8] 06 - ๋ฐ”๋‘‘์ด ์Šน์ฐจ

_์„ฑํ˜ธ_ 2022. 10. 25. 14:03
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 08 - ๋ฐ”๋‘‘์ด ์Šน์ฐจ(DFS)

์ฒ ์ˆ˜๋Š” ๊ทธ์˜ ๋ฐ”๋‘‘์ด๋“ค์„ ๋ฐ๋ฆฌ๊ณ  ์‹œ์žฅ์— ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ๋‹จ, ์ฒ ์ˆ˜๋Š” Cํ‚ฌ๋กœ๊ทธ๋žจ์„ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ทธ์˜ ๋ฐ”๋‘‘์ด๋“ค์„ ๊ฐ€์žฅ ๋ฌด๊ฒ๊ฒŒ ํƒœ์šฐ๊ณ  ์‹ถ์–ดํ•œ๋‹ค. N๋งˆ๋ฆฌ์˜ ๋ฐ”๋‘‘์ด์™€ ๊ฐ ๋ฐ”๋‘‘์ด์˜ ๋ฌด๊ฒŒ W๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, ์ฒ ์ˆ˜๊ฐ€ ํŠธ๋Ÿญ์— ํƒœ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ๋ฌด๊ฒŒ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

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

๊ฐ๊ฐ์˜ ๋ฐ”๋‘‘์ด๋ฅผ ํŠธ๋Ÿญ์— ํƒœ์šด๋‹ค, ์•ˆ ํƒœ์šด๋‹ค, 2๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒ ์žˆ์œผ๋ฏ€๋กœ ์ด์ง„ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋– ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค. ๋‹ค์Œ ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ ๋ฌธ์ œ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด์ž. 

  • ์žฌ๊ท€๋ฅผ ๋Œ๋ฉด์„œ ํŠธ๋Ÿญ์— ํƒœ์šด ๋ฐ”๋‘‘์ด๋“ค์˜ ๋ฌด๊ฒŒ ํ•ฉ(sum)์„ ๊ตฌํ•œ๋‹ค.
  • sum์ด c(ํŠธ๋Ÿญ์— ํƒœ์šธ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌด๊ฒŒ)๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—” ๋ฐ”๋กœ return ํ•œ๋‹ค.
  • sum์ด c๋ณด๋‹ค ์ž‘์œผ๋ฉด์„œ L(์ด์ง„ ํŠธ๋ฆฌ ๋ ˆ๋ฒจ)์ด ๋ฐฐ์—ด์˜ ๊ธธ์ด์™€ ๊ฐ™๋‹ค๋ฉด ํ•˜๋‚˜์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด ์™„์„ฑ๋ฌ๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ answer ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’๊ณผ sum์„ ๋น„๊ตํ•˜์—ฌ ๋” ํฐ ๊ฐ’์„ answer ๋ณ€์ˆ˜์— ์žฌํ• ๋‹นํ•œ๋‹ค.  

 

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

function solution(c, arr) {
  let answer = Number.MIN_SAFE_INTEGER;
  let len = arr.length;

  function DFS(L, sum) {
    if (sum > c) return;
    // ํ•˜๋‚˜์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ ์™„์„ฑ
    if (L === len) {
      answer = Math.max(answer, sum);
    } else {
      DFS(L + 1, sum + arr[L]);
      DFS(L + 1, sum);
    }
  }
  DFS(0, 0);
  return answer;
}

let arr = [81, 58, 42, 33, 61];
console.log(solution(259, arr));