.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