70. Climbing Stairs

2025. 10. 13. 17:42·Coding Test/LeetCode
  • 난이도: 쉬움 (Easy)
  • 링크: LeetCode 70
  • 풀이 날짜: 2025.10.13

1. 문제 이해

한 번에 1계단 또는 2계단을 오를 수 있을 때, n개의 계단을 오르는 서로 다른 방법의 총 수를 구하는 문제이다.

 

예를 들어,

  • n = 2 → (1+1, 2) → 총 2가지
  • n = 3 → (1+1+1, 1+2, 2+1) → 총 3가지

즉, n번째 계단에 도달하는 방법은

(n-1)번째에서 한 칸, 또는 (n-2)번째에서 두 칸 올라오는 경우의 합이다.

한번더 풀어서 설명하면, n-1 번째까지 오르는 경우의 수 + n-2 번째까지 오는 경우의 수 를 합하면 n번째에 오르는 경우의 수인 것이다.

점화식은 dp[i] = dp[i-1] + dp[i-2] 이다.

 

2. 접근 아이디어 및 자료구조

이 문제는 1차원 DP(1Dimensional Dynamic Programming) 로 해결할 수 있다.

즉, 각 계단마다 “해당 계단까지 오르는 경우의 수”를 저장하면서 앞선 두 계단의 값을 더해가는 방식이다.

  • dp[i] = i번째 계단까지의 방법 수
  • dp[1] = 1, dp[2] = 2
  • 이후 dp[i] = dp[i-1] + dp[i-2]

이 문제는 이전 두 값만 알면 되므로, 배열 전체를 쓸 필요 없이 변수 2개만으로 최적화할 수 있다.

 

DP

여기에서 DP(Dynamic Programming, 동적 프로그래밍)는 복잡한 문제를 더 작은 하위 문제(subproblem)로 나누고,

그 결과를 저장(Memoization) 해가며 전체 문제를 효율적으로 해결하는 알고리즘 기법이다.

 

아래의 풀이코드에서 first, second 변수는 DP 배열의 압축판이라 할 수 있는데,

전형적인 DP 풀이라면 아래와 같이 dp 배열을 만들지만, 이렇게 하면 O(n) 공간이 필요하다.

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

대신에, first와 second 변수를 사용하면, 배열 대신 마지막 두 단계의 값만 저장해서 공간을 O(1)로 최적화한 형태가 된다.

즉, 배열을 쓰지 않고 메모이제이션(Memoization) 효과만 유지한 것이라서 여전히 DP라고 부를 수 있다.

 

3. 풀이 코드

var climbStairs = function(n) {
  if (n <= 2) return n; // 2이하인 경우, early return.

  let first = 1, second = 2;

  for (let i = 3; i <= n; i++) {
    const third = first + second;
    // 다음 계단으로 진행되기 때문에, 
    first = second; // first 는 second 값이,
    second = third; // second 는 가장 최근 값인 third 값이 할당된다.
  }

  return second; // 마지막 계단인 n 에서의 총 가지수 합인 third (first + second) 값이 할당되어 있다.
};
구분 복잡도 설명
시간 복잡도 O(n) n번 반복문 수행
공간 복잡도 O(1) 변수 3개만 사용

 

4. 정리 및 요약

포인트 설명
문제 유형 1D DP (피보나치 응용)
핵심 로직 dp[i] = dp[i-1] + dp[i-2]
메모리 최적화 배열 대신 변수 2개 사용
유사 문제 Fibonacci Number, House Robber, Min Cost Climbing Stairs

이 문제의 핵심은 “DP의 점화식을 이해하고, 공간을 최소화하는 것” 으로

결국 계단 오르기는 피보나치 수열의 형태로 귀결된다.

탐색이 아니라 누적 계산 문제이며, 반복문으로 간단히 처리할 수 있는 전형적인 1D DP 문제다.

'Coding Test > LeetCode' 카테고리의 다른 글

322.Coin Change  (0) 2025.10.13
198. House Robber  (0) 2025.10.13
103. Binary Tree Zigzag Level Order Traversal  (0) 2025.10.11
102. Binary Tree Level Order Traversal  (0) 2025.10.11
637. Average of Levels in Binary Tree  (0) 2025.10.09
'Coding Test/LeetCode' 카테고리의 다른 글
  • 322.Coin Change
  • 198. House Robber
  • 103. Binary Tree Zigzag Level Order Traversal
  • 102. Binary Tree Level Order Traversal
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;)
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML &amp; CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    Javascript Essentials
    스코프
    Binary Tree BFS
    leetcode
    TCP/IP
    Network
    structure of os
    자바스크립트
    DOM
    VoiceJournal
    need a database
    Operating System
    Data Structure
    Time complexity and Space complexity
    CPU scheduling algorithm
    testing
    database
    프론트엔드 성능 최적화 가이드
    이벤트
    js pattern
    자바스크립트 딥다이브
    딥다이브
    Shared resources
    mobile app
    How memory manage data
    polylingo
    커리어
    indie hacker
    Threads and Multithreading
    모던 자바스크립트 Deep Dive
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
70. Climbing Stairs
상단으로

티스토리툴바