Skip to content

Commit 4db8165

Browse files
committed
add Jump Game solution
1 parent 9b4dd42 commit 4db8165

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

jump-game/HoonDongKang.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
* [Problem]: [55] Jump Game
3+
* (https://leetcode.com/problems/jump-game/description/)
4+
*/
5+
function canJump(nums: number[]): boolean {
6+
// 시간복잡도 O(N^N)
7+
// 공간복잡도 O(N)
8+
// Time Limit Exceeded
9+
function dfsFunc(nums: number[]): boolean {
10+
function dfs(start: number): boolean {
11+
if (start === nums.length - 1) return true;
12+
for (let i = 1; i <= nums[start]; i++) {
13+
if (dfs(start + i)) return true;
14+
}
15+
return false;
16+
}
17+
return dfs(0);
18+
}
19+
// 시간복잡도 O(N^2)
20+
// 공간복잡도 O(N)
21+
function dpFunc(nums: number[]): boolean {
22+
const n = nums.length;
23+
const dp = Array(n).fill(false);
24+
dp[0] = true;
25+
26+
for (let i = 1; i < n; i++) {
27+
for (let j = 0; j < i; j++) {
28+
if (dp[j] && j + nums[j] >= i) {
29+
dp[i] = true;
30+
break;
31+
}
32+
}
33+
}
34+
35+
return dp[n - 1];
36+
}
37+
// 시간복잡도 O(N^2)
38+
// 공간복잡도 O(N)
39+
function memoFunc(nums: number[]): boolean {
40+
let memo = new Map<number, boolean>();
41+
42+
function dfs(start: number): boolean {
43+
if (start === nums.length - 1) return true;
44+
if (memo.has(start)) return memo.get(start)!;
45+
for (let i = 1; i <= nums[start]; i++) {
46+
if (dfs(start + i)) {
47+
memo.set(start, true);
48+
return true;
49+
}
50+
}
51+
52+
memo.set(start, false);
53+
return false;
54+
}
55+
56+
return dfs(0);
57+
}
58+
59+
// 시간복잡도 O(N)
60+
// 공간복잡도 O(1)
61+
function greedyFunc(nums: number[]): boolean {
62+
let reach = 0;
63+
for (let i = 0; i < nums.length; i++) {
64+
if (i <= reach) {
65+
reach = Math.max(reach, i + nums[i]);
66+
}
67+
}
68+
69+
return nums.length - 1 <= reach;
70+
}
71+
}

0 commit comments

Comments
 (0)