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

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

_์„ฑํ˜ธ_ 2022. 12. 26. 13:25
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ์ตœ๋Œ€์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ(๋ƒ…์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

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

 

์ž…๋ ฅ์„ค๋ช…

์ฒซ ๋ฒˆ์งธ ์ค„์— ๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜ N(1<=N<=20)๊ณผ ์ œํ•œ ์‹œ๊ฐ„ M(10<=M<=300)์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N์ค„์— ๊ฑธ์ณ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ์˜ ์ ์ˆ˜์™€ ํ‘ธ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

์ถœ๋ ฅ์„ค๋ช…

์ฒซ ๋ฒˆ์งธ ์ค„์— ์ œํ•œ ์‹œ๊ฐ„ ์•ˆ์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ์˜ˆ์ œ ์ถœ๋ ฅ์˜ˆ์ œ
5 20
10 5
25 12
15 8
6 3
7 4
41

 

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

๋™์ „๊ตํ™˜ ๋ฌธ์ œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ๋ฌธ์ œ์ด๋‹ค. ํ•˜์ง€๋งŒ for ๋ฌธ์„ ์•ž์—์„œ๋ถ€ํ„ฐ ๋Œ๋ฉด ์ค‘๋ณต ์ ์šฉ์ด ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ค‘๋ณต ์ ์šฉ์ด ์•ˆ๋˜๋ฏ€๋กœ ์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ j๋ฅผ ๋’ค์—์„œ๋ถ€ํ„ฐ ๋Œ์•„์•ผ ๋œ๋‹ค.

dp[j] - j ์‹œ๊ฐ„ ์•ˆ์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜ 

function solution(m, arr) {
  let answer = 0;
  let dp = Array.from({ length: m + 1 }, () => 0);
  dp[0] = 0;

  for (let i = 0; i < arr.length; i++) {
    let score = arr[i][0];
    let time = arr[i][1];
    for (let j = m; j >= time; j--) {
      dp[j] = Math.max(dp[j], dp[j - time] + score);
    }
  }

  answer = dp[m];
  return answer;
}

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