๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section10 - 4 - ๋™์ „ ๊ตํ™˜(๋ƒ…์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

by YWTechIT 2021. 10. 14.
728x90

๐Ÿ“ section10 - 4 - ๋™์ „ ๊ตํ™˜(๋ƒ…์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

๋ฌธ์ œ: ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๋‹จ์œ„์˜ ๋™์ „๋“ค์ด ์ฃผ์–ด์ ธ ์žˆ์„ ๋•Œ ๊ฑฐ์Šค๋ฆ„๋ˆ์„ ๊ฐ€์žฅ ์ ์€ ์ˆ˜์˜ ๋™์ „์œผ๋กœ ๊ตํ™˜ํ•ด์ฃผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ์ฃผ๋ฉด ๋˜๋Š”๊ฐ€? ๊ฐ ๋‹จ์œ„์˜ ๋™์ „์€ ๋ฌดํ•œ์ • ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

// ์ž…๋ ฅ
3
1 2 5
15

// ์ถœ๋ ฅ
// (5, 5, 5) ๋™์ „ 3๊ฐœ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
3

 

๋™์ „๊ตํ™˜ ๋ฌธ์ œ๋Š” ์ €๋ฒˆ์— dfs(๋ถ€๋ถ„์ง‘ํ•ฉ) + edgeCut์„ ์ด์šฉํ•ด์„œ ํ‘ผ ์ ์ด ์žˆ๋‹ค. ๋งŒ์•ฝ์— ๋™์ „์˜ ์ข…๋ฅ˜๊ฐ€ 100๊ฐœ ์ด์ƒ, ๊ฑฐ์Šค๋ฆ„ ๋ˆ์ด 100,000 ์ด์ƒ์ผ ๊ฒฝ์šฐ DFS๋กœ ํ’€ ์ˆ˜ ์—†๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” DP์—์„œ ๋ƒ…์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค.

 

  1. dp๋Š” ๊ฑฐ์Šฌ๋Ÿฌ์ค„ ๋ˆ(m)๋งŒํผ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ตœ์†Œ ๋™์ „์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐœ์ˆ˜๋ฅผ ์ œ์ผ ๋งŽ์ด ๊ฑฐ์Šฌ๋Ÿฌ์ฃผ๋Š” ๊ฐœ์ˆ˜๋ณด๋‹ค ํฐ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.(๋ฌธ์ œ์—์„œ ๊ธˆ์•ก์€ ์ตœ๋Œ€ 500์›๊นŒ์ง€์ธ๋ฐ, ๋‹ค๋ฅธ ๋™์ „์— ๋น„ํ•ด 1์›์œผ๋กœ 500์›์„ ๊ฑฐ์Šฌ๋Ÿฌ์ฃผ๋Š” ๊ฐœ์ˆ˜๊ฐ€ ์ œ์ผ ๋งŽ์œผ๋ฏ€๋กœ 1์›์งœ๋ฆฌ ๋™์ „ 500๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ dp๋Š” 500๋ณด๋‹ค ํฐ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค. )
  2. dp[j]: j ๊ธˆ์•ก์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ตœ์†Œ ๋™์ „์˜ ๊ฐœ์ˆ˜
  3. ํ•ต์‹ฌ ๋กœ์ง: ํ˜„์žฌ ๊ฑฐ์Šฌ๋Ÿฌ์ค˜์•ผ ํ•  ๋™์ „์˜ ๊ธˆ์•ก๋งŒํผ ๋นผ์ฃผ๊ณ  ์ด์ „์— ๊ฑฐ์Šฌ๋Ÿฌ ์คฌ๋˜ ๋™์ „์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜ + 1 (ํ˜„์žฌ ๋‚ด๊ฐ€ ๊ฑฐ์Šฌ๋Ÿฌ์ฃผ๋Š” ๋™์ „์˜ ๊ฐœ์ˆ˜)
  4. 0์›์„ ๊ฑฐ์Šฌ๋Ÿฌ์ฃผ๋Š” ๋™์ „์˜ ๊ฐœ์ˆ˜ dp[0]=0
  5. n์›์€ dp[n]๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

 

 

728x90

 

let n = 3;
let coin = [1, 2, 5];
let change = 15;

console.log(solution(n, coin, change));

function solution(n, coin, change){
  let dp = Array.from({length: change+1}, () => 1000);
  dp[0]=0;  // 0์›์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ฃผ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ 0

  for (let i=0; i<n; i++){
    for (let j=coin[i]; j<=change; j++){
      dp[j]=Math.min(dp[j], dp[j-coin[i]]+1);
    }
  }
  return dp[change];
}

๐Ÿ‘‰๐Ÿฝ 3

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€