@@ -7,26 +7,26 @@ function climbStairs(n: number): number {
7
7
* 1 -> [1]
8
8
* 2 -> [1,1] [2]
9
9
* 3 -> [1,1,1] [2,1] [1,2]
10
- * 4 -> [1,1,1,1] [2,1,1] [1,2,1] [1,1,2] [2,2]
10
+ * 4 -> [1,1,1,1] [2,1,1] [1,2,1] [1,1,2] [2,2]
11
11
* 5 -> [1,1,1,1,1] [2,1,1,1] [1,2,1,1] [1,1,2,1] [1,1,1,2] [2,2,1], [1,2,2], [2,1,2]
12
- * 6 -> [1,1,1,1,1,1] [2,1,1,1,1] [...] [1,1,1,1,2] [2,2,1,1], [2,1,2,1], [2,1,1,2] [1,1,2,2], [1,2,1,2], [1,2,2,1]
13
- => (1- n, 2- 0) n가지 (1:n-2, 2:1) (n-1)*(n-2)/(n-2) 가지 (1: n-4, 2: n/2) (n-2)*(n-3)/2 가지
12
+ * 6 -> [1,1,1,1,1,1] [2,1,1,1,1] [...] [1,1,1,1,2] [2,2,1,1], [2,1,2,1], [2,1,1,2] [1,1,2,2], [1,2,1,2], [1,2,2,1]
13
+ => (1: n, 2: 0) n가지 (1:n-2, 2:1) / n가지 (1: n-4, 2: n/2) C(n, n/2) 가지
14
14
*/
15
15
16
- // # solution 1
17
- // TC: O(N)
18
- // SC: O(N)
16
+ // # Solution 1
17
+
19
18
// const stair = {1: 1, 2:2}
20
19
// for(let i = 3; i<=n; i++){
21
20
// stair[i] = stair[i-1] + stair[i-2]
22
21
// }
23
-
24
- // # solution 2
25
22
// TC: O(N)
26
- // SC: O(1)
23
+ // SC: O(N)
24
+
25
+ // # Solution 2
26
+
27
27
// if(n < 3) return n
28
- // let curr = 2
29
- // let prev = 1
28
+ // let curr = 2 // 현재 계단을 오르는 방법 수
29
+ // let prev = 1 // 이전 계단을 오르는 방법 수
30
30
31
31
// for(let i=0; i<n-2; i++){
32
32
// const next = prev + curr;
@@ -35,10 +35,10 @@ function climbStairs(n: number): number {
35
35
// }
36
36
37
37
// return curr
38
+ // TC: O(N)
39
+ // SC: O(1)
38
40
39
41
// # Solution 3: 재귀
40
- // TC: O(N)
41
- // SC: O(N)
42
42
const memo = { 1 : 1 , 2 : 2 } ;
43
43
function calculateClimbingWay ( n , memo ) {
44
44
if ( ! ( n in memo ) ) {
@@ -51,4 +51,6 @@ function climbStairs(n: number): number {
51
51
return memo [ n ] ;
52
52
}
53
53
return calculateClimbingWay ( n , memo ) ;
54
+ // TC: O(N)
55
+ // SC: O(N)
54
56
}
0 commit comments