ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฌธ์ œ

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

 

์ฝ”๋“œ

function solution(n) {
  let answer = 0;

  function DFS(sum) {
    if(sum > n) return; //cut-edge
    if(sum === n) {
      answer++;
      return;
    } 
    else {
      DFS(sum + 1);
      DFS(sum + 2);
    }
  }

  DFS(0);

  return answer;
}

console.log(solution(7));

 

์˜ค๋‹ต

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๊นŠ์ด ํƒ์ƒ‰์œผ๋กœ ํ‘ธ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋™์ ๊ณ„ํš๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ํ‘ธ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

 

๋™์ ๊ณ„ํš๋ฒ•(Dynamic Programming)

  • ์ „์ฒด ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‹จ์ˆœํ™”ํ•œ ๋‹ค์Œ ์ ํ™”์‹์œผ๋กœ ๋งŒ๋“ค์–ด ์žฌ๊ท€์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ „์ฒด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹
  • ์ „์ฒด ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‹จ์ˆœํ™” => ๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ ์ •์˜
  • ์žฌ๊ท€์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ ํ™”์‹์„ ๋งŒ๋“ฌ => ๋ถ€๋ถ„ ๋ฌธ์ œ์—์„œ ๋ถ„์„๋œ ๋‚ด์šฉ ํ† ๋Œ€๋กœ ์ ํ™”์‹ ๋„์ถœ
  • ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)์€ ๋™์ ๊ณ„ํš๋ฒ•์—์„œ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•จ

๋™์ ๊ณ„ํš๋ฒ•

 

์ฝ”๋“œ

function solution(n) {
  let answer = 0;
  let dy = Array.from({length: n + 1}, () => 0);
  dy[1] = 1; //๋‹จ์ˆœํ™”(๋ถ€๋ถ„๋ฌธ์ œ ์ •์˜)
  dy[2] = 2;
  
  for(let i = 3; i <= n; i++) {
    dy[i] = dy[i - 2] + dy[i - 1]; //์ ํ™”์‹
  }
  answer = dy[n];
  return answer;
}

console.log(solution(7));
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ