File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 1+ function climbStairs ( n : number ) : number {
2+ // 방법 1: (Failed)
3+ // Set 객체에 '1', '2'를 담고 while문으로 계속 증가시키면서 계산하는 방법
4+
5+ // 시간 복잡도: O(n * 2^n) - 각 단계마다 가능한 모든 조합을 생성하므로 지수적으로 증가
6+ // 공간 복잡도: O(2^n) - 최악의 경우 모든 가능한 조합을 저장해야 함
7+ // 실패 이유: 시간 초과
8+ const getResult1 = ( ) : number => {
9+ const currentSet = new Set < string > ( [ '1' , '2' ] ) ;
10+ const resultSet = new Set < string > ( ) ;
11+
12+ while ( currentSet . size > 0 ) {
13+ const nextSet = new Set < string > ( ) ;
14+
15+ currentSet . forEach ( ( path ) => {
16+ const sum = [ ...path ] . reduce ( ( acc , cur ) => acc + parseInt ( cur ) , 0 ) ;
17+ if ( sum === n ) resultSet . add ( path ) ;
18+ else if ( sum < n ) {
19+ nextSet . add ( path + '1' ) ;
20+ nextSet . add ( path + '2' ) ;
21+ }
22+ } ) ;
23+
24+ currentSet . clear ( ) ;
25+ nextSet . forEach ( ( v ) => currentSet . add ( v ) ) ;
26+ }
27+
28+ return resultSet . size ;
29+ } ;
30+
31+ // 방법 2:
32+ // 앞 2가지 더하기
33+
34+ // 시간 복잡도: O(n) - n까지 한 번의 반복문만 실행
35+ // 공간 복잡도: O(1) - 고정된 변수(prev2, prev1)만 사용하여 추가 메모리 사용 없음
36+ const getResult2 = ( ) => {
37+ if ( n <= 2 ) {
38+ return n ;
39+ }
40+
41+ let prev2 = 1 ;
42+ let prev1 = 2 ;
43+ for ( let i = 3 ; i <= n ; i ++ ) {
44+ const curr = prev2 + prev1 ;
45+ prev2 = prev1 ;
46+ prev1 = curr ;
47+ }
48+ return prev1 ;
49+ } ;
50+
51+ // return getResult1();
52+ return getResult2 ( ) ;
53+ } ;
You can’t perform that action at this time.
0 commit comments