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

[JavaScript/section 8] 07 - ์ตœ๋Œ€์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

_์„ฑํ˜ธ_ 2022. 10. 26. 08:17
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 07 - ์ตœ๋Œ€์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ(DFS)

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

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

์ด์ „์— ํ’€์—ˆ๋˜ ๋ฐ”๋‘‘์ด ์Šน์ฐจ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ์ด ๋ฌธ์ œ ๋˜ํ•œ ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผ ํ•˜๋Š”์ง€ ๊ฐ์ด ์˜ฌ ๊ฒƒ์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค, ์•ˆํ‘ผ๋‹ค, 2๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒ ์กด์žฌํ•œ๋‹ค.

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

 

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

function solution(m, ps, pt) {
  let answer = Number.MIN_SAFE_INTEGER;
  let len = ps.length;

  function DFS(L, sum, time) {
    if (time > m) return;
    if (L === len) {
      answer = Math.max(answer, sum);
    } else {
      DFS(L + 1, sum + ps[L], time + pt[L]);
      DFS(L + 1, sum, time);
    }
  }

  DFS(0, 0, 0);
  return answer;
}

let ps = [10, 25, 15, 6, 7];
let pt = [5, 12, 8, 3, 4];
console.log(solution(20, ps, pt));