Skip to content

Commit 92fb01e

Browse files
committed
Solution: Jump Game
1 parent 2a6021e commit 92fb01e

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

โ€Žjump-game/flynn.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
ํ’€์ด 1
3+
- memo ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ n-1๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ํ’€์ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
4+
memo[i] = i๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ ์ถœ๋ฐœํ–ˆ์„ ๋•Œ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€
5+
6+
Big O
7+
- N: ์ฃผ์–ด์ง„ ๋ฐฐ์—ด nums์˜ ๊ธธ์ด
8+
- Time complexity: O(N)
9+
- Space complexity: O(N)
10+
- ํ’€์ด 2๋ฅผ ์ด์šฉํ•˜๋ฉด O(1)์œผ๋กœ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
11+
*/
12+
13+
func canJump(nums []int) bool {
14+
n := len(nums)
15+
16+
if nums[0] == 0 && n > 1 {
17+
return false
18+
}
19+
20+
memo := make([]bool, n)
21+
memo[n-1] = true
22+
23+
for i := n - 2; i >= 0; i-- {
24+
for j := 1; j <= nums[i]; j++ {
25+
if i+j >= n {
26+
break
27+
}
28+
if memo[i+j] {
29+
memo[i] = true
30+
break
31+
}
32+
}
33+
}
34+
35+
return memo[0]
36+
}
37+
38+
/*
39+
ํ’€์ด
40+
- ํ’€์ด 1์„ ์ž˜ ๊ด€์ฐฐํ•˜๋ฉด memo๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
41+
memo ๋ฐฐ์—ด ๋Œ€์‹ ์—, ๋ฌธ์ œ์˜ ์กฐ๊ฑด๋Œ€๋กœ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ขŒ์ธก์˜ ์ธ๋ฑ์Šค๋งŒ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค (leftmost)
42+
43+
Big O
44+
- N: ์ฃผ์–ด์ง„ ๋ฐฐ์—ด nums์˜ ๊ธธ์ด
45+
- Time complexity: O(N)
46+
- Space complexity: O(1)
47+
*/
48+
49+
func canJump(nums []int) bool {
50+
n := len(nums)
51+
52+
if nums[0] == 0 && n > 1 {
53+
return false
54+
}
55+
56+
leftmost := n - 1
57+
58+
for i := n - 2; i >= 0; i-- {
59+
if i+nums[i] >= leftmost {
60+
leftmost = i
61+
}
62+
}
63+
64+
return leftmost == 0
65+
}

0 commit comments

Comments
ย (0)