3
3
- 1 <= nums.length <= 10^4
4
4
- 0 <= nums[i] <= 10^5
5
5
6
+ <Solution 1>
7
+
6
8
Time Complexity: O(n)
7
- - n์ ๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ํ ๋ฒ ์ํ
9
+ - ๋ฐฐ์ด์ ํ ๋ฒ ์ํ (๋ฐฐ์ด์ ๊ธธ์ด = n)
8
10
9
11
Space Complexity: O(1)
10
12
- ์ถ๊ฐ ๊ณต๊ฐ ์ฌ์ฉ ์์
11
13
12
- ํ์ด๋ฐฉ๋ฒ:
14
+ ํ์ด๋ฐฉ๋ฒ:
15
+ - ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ํ์ฉ
16
+ - ๋งค ์ง์ ์์ ๊ฐ ์ ์๋ ์ต๋ ๊ฑฐ๋ฆฌ๋ง์ ๊ธฐ๋กํจ
17
+ - ๊ฐ ์์น์์ greedyํ๊ฒ ๊ฐ์ฅ ๋ฉ๋ฆฌ ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํจ
13
18
1. max_reach ๋ณ์๋ก ํ์ฌ๊น์ง ๋๋ฌ ๊ฐ๋ฅํ ์ต๋ ๊ฑฐ๋ฆฌ ์ ์ฅ
14
19
2. ๋ฐฐ์ด์ ์ํํ๋ฉด์:
15
- - ํ์ฌ ์์น๊ฐ max_reach๋ณด๋ค ํฌ๋ฉด ๋๋ฌ ๋ถ๊ฐ๋ฅ
20
+ - ํ์ฌ ์์น๊ฐ max_reach๋ณด๋ค ํฌ๋ฉด ๋๋ฌ ๋ถ๊ฐ๋ฅ
16
21
- max_reach๋ฅผ ํ์ฌ ์์น์์ ์ ํ ๊ฐ๋ฅํ ๊ฑฐ๋ฆฌ์ ๋น๊ตํด ์
๋ฐ์ดํธ
17
22
- max_reach๊ฐ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ณด๋ค ํฌ๋ฉด ๋๋ฌ ๊ฐ๋ฅ
18
23
"""
@@ -30,3 +35,42 @@ def canJump(self, nums: List[int]) -> bool:
30
35
return True
31
36
32
37
return True
38
+
39
+ """
40
+ <Solution 2>
41
+
42
+ Time Complexity: O(n^2)
43
+ - ์ต์
์ ๊ฒฝ์ฐ ๊ฐ ์ธ๋ฑ์ค์์ ๋ชจ๋ ๊ฐ๋ฅํ ์ ํ๋ฅผ ์๋
44
+
45
+ Space Complexity: O(n)
46
+ - ๋ฉ๋ชจ์ด์ ์ด์
๋์
๋๋ฆฌ + ์ฌ๊ท ํธ์ถ ์คํ
47
+
48
+ ํ์ด๋ฐฉ๋ฒ:
49
+ - DFS + ๋ฉ๋ชจ์ด์ ์ด์
(๋ฐฑํธ๋ํน)
50
+ - ๋ชจ๋ ๊ฐ๋ฅํ ์ ํ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ ์ค๋ณต ๊ณ์ฐ์ ๋ฐฉ์งํจ
51
+ """
52
+ class Solution :
53
+ def canJump (self , nums : List [int ]) -> bool :
54
+ memo = {} # ๋ฉ๋ชจ์ด์ ์ด์
์ผ๋ก ์ต์ ํ
55
+
56
+ def dfs (index ):
57
+ # ๋์ ๋๋ฌํ์ผ๋ฉด True ๋ฐํ
58
+ if index >= len (nums ) - 1 :
59
+ return True
60
+
61
+ # ์ด๋ฏธ ๊ณ์ฐํ์ผ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉ
62
+ if index in memo :
63
+ return memo [index ]
64
+
65
+ # ํ์ฌ ์์น์์ ๊ฐ๋ฅํ ๋ชจ๋ ์ ํ๋ฅผ ์๋ํจ
66
+ for jump in range (1 , nums [index ] + 1 ):
67
+ if dfs (index + jump ):
68
+ memo [index ] = True
69
+ return True
70
+
71
+ # ๋ชจ๋ ์ ํ๋ฅผ ์๋ํด๋ด๋ ๋์ ๋๋ฌํ์ง ๋ชปํจ
72
+ memo [index ] = False
73
+ return False
74
+
75
+ return dfs (0 )
76
+
0 commit comments