File tree 1 file changed +29
-0
lines changed
1 file changed +29
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * ๋ฐฐ์ด์ ๊ฐ ์ธ๋ฑ์ค์์ ๊ฐ๋ฅํ ์ ํ๋ฅผ ํตํด ๋ง์ง๋ง ์ธ๋ฑ์ค์ ๋๋ฌํ ์ ์๋์ง ํ์ธํ๋ ๋ฌธ์
3
+ * @param {number[] } nums - ๊ฐ ์ธ๋ฑ์ค์์ ์ด๋ํ ์ ์๋ ์ต๋ ๊ฑฐ๋ฆฌ
4
+ * @returns {boolean } - ๋ง์ง๋ง ์ธ๋ฑ์ค์ ๋๋ฌํ ์ ์์ผ๋ฉด true, ์๋๋ฉด false
5
+ *
6
+ * ์๊ฐ ๋ณต์ก๋: O(2^n)
7
+ * - DFS ๊ธฐ๋ฐ์ ํ์์ด๋ฏ๋ก ์ต์
์ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒฝ์ฐ ํ์
8
+ *
9
+ * ๊ณต๊ฐ ๋ณต์ก๋: O(n) (์ฌ๊ท ํธ์ถ ์คํ๊ณผ ๋ฐฉ๋ฌธ ๋ฐฐ์ด ์ฌ์ฉ)
10
+ * - `visited` ๋ฐฐ์ด์ด nums.length ํฌ๊ธฐ๋ฅผ ์ฐจ์ง
11
+ */
12
+ function canJump ( nums : number [ ] ) : boolean {
13
+ const visited = new Array ( nums . length ) . fill ( false ) ;
14
+
15
+ const dfs = ( idx : number ) : boolean => {
16
+ if ( idx >= nums . length - 1 ) return true ; // ๋ง์ง๋ง ์ธ๋ฑ์ค ์ด์ ๋๋ฌํ๋ฉด ์ฑ๊ณต
17
+ if ( visited [ idx ] ) return false ; // ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ ์ค๋ณต ๋ฐฉ๋ฌธ ๋ฐฉ์ง
18
+
19
+ visited [ idx ] = true ; // ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
20
+
21
+ for ( let i = 1 ; i <= nums [ idx ] ; i ++ ) { // ํ์ฌ ์์น์์ ๊ฐ๋ฅํ ๋ชจ๋ ์ ํ ํ์
22
+ if ( dfs ( idx + i ) ) return true ;
23
+ }
24
+
25
+ return false ;
26
+ }
27
+
28
+ return dfs ( 0 ) ; // 0๋ฒ ์ธ๋ฑ์ค์์ ์์
29
+ }
You canโt perform that action at this time.
0 commit comments