.Zzumbong

[leetCode/JS] 70. Climbing Stairs ๋ณธ๋ฌธ

coding test/leetCode

[leetCode/JS] 70. Climbing Stairs

์ญ˜๋ด‰ 2022. 12. 12. 10:44

๋‚œ์ด๋„ [ ๐Ÿ˜Š ] Easy

 

๋ฌธ์ œ ์„ค๋ช…

You are climbing a staircase. It takes n steps to reach the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

n ๊ณ„๋‹จ์„ ์˜ฌ๋ผ๊ฐ€๋Š”๋ฐ, 1 ๋˜๋Š” 2์นธ ์”ฉ ์˜ฌ๋ผ ๊ฐˆ ๋•Œ, ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์–ผ๋งˆ์ธ๊ฐ€?

 

์ž…์ถœ๋ ฅ ์˜ˆ

Example 1:

Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps

 

Example 2:

Input: n = 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

 

Constraints

  • 1 <= n <= 45

 


 

 

๋‚ด ์†”๋ฃจ์…˜

  • ์˜ˆ์ „ ํ”ผ๋ณด๋‚˜์ฐŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ DP(Dynamic Programming)์ด ์“ฐ์ธ๋‹ค.
  • DP์˜ ๊ธฐ๋ณธ์ธ ํฐ ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์€ ์ž‘์—…๋ถ€ํ„ฐ ๊ณ„์‚ฐํ•œ๋‹ค.๋ฅผ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • ๋งŒ์•ฝ n = 1 ์ผ๋•Œ, 1๊ฐœ [1]
  • n = 2 ์ผ ๋•Œ, 2๊ฐœ [1, 1], [2]
  • n = 3 ์ผ ๋•Œ, 3๊ฐœ [1, 1, 1], [1, 2], [2, 1]
  • n = 4 ์ผ ๋•Œ, 5๊ฐœ [1, 1, 1, 1], [1, 1, 2], [2, 1, 1], [1, 2, 1], [2, 2]
  • n = 5 ์ผ ๋•Œ๋Š” [n-1] + [n-2] ์ธ 8์ด ๋œ๋‹ค.
  • ๊ฒฐ๋ก ์ ์œผ๋กœ ๊ณ„๋‹จ 5๊ฐœ๊ฐ€ ์žˆ์„ ๋•Œ, ๊ณ„๋‹จ, 4๊ฐœ ์ผ๋•Œ์™€ 3๊ฐœ ์ผ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ํ•˜๋ฉด 5๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.
  • ์ ํ™”์‹์œผ๋กœ ๋ณด๋ฉด f(n) = f(n-1) + f(n-2) ๊ฐ€ ๋œ๋‹ค.
var climbStairs = function(n) {
  if(n<3) return n;
  const arr = [1, 1];
  for (let i = 2; i <= n; i++) {
    arr[i] = arr[i-1] + arr[i-2];
  }
  return arr[n];
};

 

๊ฐ์ƒํ‰

  • ํ”ผ๋ณด๋‚˜์ฐŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ชป ํ’€์–ด๋ดค๊ฑฐ๋‚˜ DP๋ฅผ ๋ชจ๋ฅด๋ฉด ๊ฐœ๊ณ ์ƒํ•œ๋‹ค.
  • ์•Œ๋ฉด Easy! ๋ชจ๋ฅด๋ฉด ์’ฏ.

 

 

var climbStairs = function(n) {
    let two = 0, one = 1;
    for (let i = 0; i < n; i++) {
      [two, one] = [one, two + one];
    }
    return one;
};
  • ์žฌ๋ฏธ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ฐพ์•˜๋‹ค. ๋„ˆ๋ฌด ์ž˜ํ–ˆ๋„ค ๋˜‘๋˜‘์ด์•ผ.
Comments