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

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section10 - 1 - ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ(DP)

by YWTechIT 2021. 10. 13.
728x90

๐Ÿ“ section10 - 1 - ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ(DP)

์ด๋ฒˆ ์„น์…˜์€ ๋™์  ๊ณ„ํš ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ธ(DP)์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šด๋‹ค. (๋„ทํ”Œ๋ฆญ์Šค DP ๊ฟ€์žผ ๐Ÿ˜)

 

DP ๋ฌธ์ œ๋Š” ์ง๊ด€์ ์œผ๋กœ ๋ถ„์„ํ•˜๊ธฐ ์–ด๋ ค์šด๋ฐ, ์ด ๊ฐ์„ ํ‚ค์šฐ๋ ค๋ฉด ์„ ์ƒ๋‹˜๊ป˜์„œ๋Š” ์—ญ์‹œ ์–‘์น˜๊ธฐ ์ฆ‰, ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ด์•ผ ํ•œ๋‹ค๊ณ  ํ•˜์…จ๋‹ค. DP๋ฌธ์ œ๋“ค์˜ ํŠน์ง•์„ ์‚ดํŽด๋ณด์ž.

 

  1. DP๋Š” ํฐ ๋ฌธ์ œ๋ฅผ ํ•œ ๋ฒˆ์— ํ’€๊ธฐ๋ณด๋‹ค๋Š” ์ง๊ด€์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋‹จ์œ„๋กœ ์ž˜๊ฒŒ ์ชผ๊ฐ ๋‹ค.
  2. ์ž‘์€ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ต์„ dp์— ์ €์žฅํ•˜๊ณ , ๋ฒ”์œ„๋ฅผ ์ ์ฐจ ๋„“ํ˜€๊ฐ„๋‹ค. ์ด๋•Œ, ์•ž์—์„œ ์‚ฌ์šฉํ•œ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  3. ์ง๊ด€์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ dp์— ์ €์žฅํ•˜๋Š”๋ฐ ๋ณดํ†ต์€ dp[1]~dp[2] ์ •๋„์ด๊ณ  ๋งŽ์œผ๋ฉด dp[0]~dp[3]์ •๋„๊นŒ์ง€ ์ €์žฅํ•œ๋‹ค.
  4. ์ž‘์€ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ•œ๋ฒˆ ์„ธ๋ณธ๋‹ค. (์ดํ›„์—๋Š” ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ• ์ง€ ๊ณ ๋ฏผํ•˜๊ธฐ!)
  5. ์ด์ „ ๋‹จ๊ณ„์™€์˜ ๊ด€๊ณ„์‹(์ ํ™”์‹)์„ ๋งŒ๋“ค์–ด๋ณด์ž. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋ฐ”๋กœ ์•ž์˜ ํ•ญ์— 3์„ ๋”ํ–ˆ๋”๋‹ˆ ๋‹ต์ด ๋˜๋Š” ๊ทœ์น™(d[i]=d[i-1]+3) ๋“ฑ

 

๋ฌธ์ œ: ์ฒ ์ˆ˜๋Š” ๊ณ„๋‹จ์„ ์˜ค๋ฅผ ๋•Œ ํ•œ ๋ฒˆ์— ํ•œ ๊ณ„๋‹จ ๋˜๋Š” ๋‘ ๊ณ„๋‹จ์”ฉ ์˜ฌ๋ผ๊ฐ„๋‹ค. ๋งŒ์•ฝ, ์ด 4๊ณ„๋‹จ์„ ์˜ค๋ฅธ๋‹ค๋ฉด ๊ทธ ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋Š” 1+1+1+1 , 1+1+2 , 1+2+1, 2+1+1, 2+2 ๋กœ ์ด 5๊ฐ€์ง€์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด N ๊ณ„๋‹จ์ผ ๋•Œ ์ฒ ์ˆ˜๊ฐ€ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋Š” ๋ช‡ ๊ฐ€์ง€์ธ๊ฐ€?

 

N๊ณ„๋‹จ์„ ์˜ฌ๋ผ๊ฐˆ ๋•Œ๋ฅผ ๋ฐ”๋กœ ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ  ๊ณ„๋‹จ์„ 1๊ฐœ ์˜ค๋ฅผ ๋•Œ, 2๊ฐœ ์˜ค๋ฅผ ๋•Œ์ฒ˜๋Ÿผ ๋‚ฎ์€ ๋‹จ๊ณ„๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž. ์ฒ ์ˆ˜๊ฐ€ 1๊ณ„๋‹จ์„ ์˜ค๋ฅผ ๋•Œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1๊ฐœ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด 2๊ณ„๋‹จ์„ ์˜ค๋ฅผ ๋•Œ๋Š” ์–ด๋–จ๊นŒ? ํ•œ ์นธ์”ฉ ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋‘ ์นธ์„ ํ•œ ๋ฒˆ์— ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ• ์ด 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

๊ทธ๋ ‡๋‹ค๋ฉด 3๋ฒˆ์งธ ๊ณ„๋‹จ์„ ์˜ค๋ฅผ ๋•Œ๋Š” ์–ด๋–จ๊นŒ? 3๋ฒˆ์งธ ๊ณ„๋‹จ์„ ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•์€ 1๊ณ„๋‹จ์—์„œ ํ•œ๋ฒˆ์— ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฐฉ๋ฒ•๊ณผ 2๊ณ„๋‹จ์—์„œ ํ•œ ์นธ ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ์ฆ‰, 1๊ณ„๋‹จ์—์„œ ์˜ค๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ + 2๊ณ„๋‹จ์—์„œ ์˜ค๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋œ๋‹ค. ํ•˜๋‚˜๋งŒ ๋” ํ•ด๋ณด์ž. 4๋ฒˆ์งธ ๊ณ„๋‹จ์„ ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์€ ์–ด๋–จ๊นŒ? ์ผ์ผ์ด ์„ธ๋ณด๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. DP๋Š” ์ด์ „์˜ ๊ฐ’์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 2๊ณ„๋‹จ์—์„œ ํ•œ ๋ฒˆ์— ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฐฉ๋ฒ•๊ณผ 3๊ณ„๋‹จ์—์„œ ํ•œ ์นธ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์„ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด๋ฅผ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

let n = 7;

console.log(solution(n));

function solution(n){
  let d = Array.from({length: n+1}, () => 0);
  d[1] = 1;
  d[2] = 2;

  for (let i=3; i<=n; i++){
    d[i] = d[i-1] + d[i-2];
  }

  return d[n];
}

๐Ÿ‘‰๐Ÿฝ 21

 

728x90

 

๐Ÿ’ก ๋ฒˆ์™ธ: ๊ณ„๋‹จ์„ 3์นธ๊นŒ์ง€ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋ฉด?

๋งŒ์•ฝ์—, ์ฒ ์ˆ˜๊ฐ€ ํ•œ๋ฒˆ์— ๊ณ„๋‹จ์„ ์˜ค๋ฅผ ๋•Œ 1์นธ, 2์นธ, 3์นธ๊นŒ์ง€ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ• ๊นŒ? ์ด์ „์— ๊ตฌํ–ˆ๋˜ 1์นธ, 2์นธ์€ ๋‚จ๊ฒจ๋‘๊ณ  3์นธ์„ ์–ด๋–ป๊ฒŒ ์˜ฌ๋ผ๊ฐˆ์ง€ ๊ตฌํ•ด๋ณด์ž. ํ•ต์‹ฌ์ ์ธ ์‚ฌ๊ณ ๋Š” dp[3]์ด ์–ด๋””์„œ ์™”๋Š”์ง€๋ฅผ ๋– ์˜ฌ๋ฆฌ๋ฉด ๋œ๋‹ค. dp[3]์€ dp[3-1]์นธ์—์„œ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•๊ณผ dp[3-2]์นธ์—์„œ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ, dp[3-3]์นธ์—์„œ ํ•œ ๋ฒˆ์— 3์นธ์„ ๊ฑด๋„ˆ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ dp[0]=1 ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

let n = 5;

console.log(solution(n));

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

  for(let i=3; i<=n; i++){
    dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
  }
  return dp[n];   
}

๐Ÿ‘‰๐Ÿฝ 13
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€