Skip to content

Commit 864ddca

Browse files
committed
feat: climbing-stairs 문제 풀이
1 parent 87d6885 commit 864ddca

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

climbing-stairs/haxr369.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
/**
3+
* 계산 n개를 오르기 위해 1 또는 2개씩 오르는 모든 경우의 수를 구하기
4+
*
5+
* DP문제 풀이 과정
6+
* 1. 문제 단순화
7+
* - 숫자 N을 만들기 위해 1 또는 2를 더하는 순서를 만드는 경우의 수
8+
* 2. 문제에서 원하는 것
9+
* - N을 만들기 위한 모든 경우의 수
10+
* => DP[N] = N을 만들기 위한 모든 경우의 수
11+
* 2. 규칙 찾기
12+
* - N은 N-1에서 1 더하거나, N-2에서 2를 더하면 도달할 수 있다.
13+
* - 따라서 N에 도달하기 위한 경우의 수는 N-1을 도달하기 위한 경우의 수 + N-2에 도달하기 위한 경우의 수
14+
* - DP[0] = 1 => 움직이지 않는다는 경우의 수
15+
* - DP[1] = 1 => 1칸 움직이는 경우의 수
16+
* - DP[N] = DP[N-2] + DP[N-1]
17+
*/
18+
public int climbStairs(int n) {
19+
/**
20+
* Runtime: 0 ms (Beats 100.00%)
21+
* Memory: 42.00 MB (Beats 15.00%)
22+
* Space Complexity: O(N)
23+
* - N 크기의 배열 1개 사용으로 O(N)
24+
* > O(N)
25+
* Time Complexity: O(N)
26+
* - N회 덧셈으로 => O(N)
27+
* > O(N)
28+
*/
29+
int[] dp = new int[n + 1];
30+
dp[0] = 1;
31+
dp[1] = 1;
32+
33+
for (int i = 2; i < n + 1; i++) {
34+
dp[i] = dp[i - 1] + dp[i - 2];
35+
}
36+
return dp[n];
37+
}
38+
}

0 commit comments

Comments
 (0)