File tree Expand file tree Collapse file tree 1 file changed +38
-0
lines changed
Expand file tree Collapse file tree 1 file changed +38
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments