|
| 1 | +"""TC: O(n), SC: O(1) |
| 2 | +
|
| 3 | +n์ ์ฃผ์ด์ง ๋ฆฌ์คํธ์ ๊ธธ์ด |
| 4 | +
|
| 5 | +์์ด๋์ด: |
| 6 | +- ๋์ ์๋ ์์ดํ
๋ถํฐ ์์ํด์ '์ต์ ์ด๋๊น์ง๋ ๋๋ฌํด์ผ ๋ ์นธ๊น์ง ์ ํ ๊ฐ๋ฅํ์ง'๋ฅผ ์
๋ฐ์ดํธ ํ๋ค. |
| 7 | +- example๋ค๋ก ์ดํดํด๋ณด์. index๋ 0๋ถํฐ ์์. |
| 8 | + - example 1: [2,3,1,1,4] |
| 9 | + - 4๋ฒ์งธ ์นธ์ ๋๋ฌํ ์ ์์ผ๋ฉด ์ฑ๊ณต์ด๋ค. reach_at_least ๊ฐ์ 4๋ก ์ด๊ธฐํ ํ๋ค. |
| 10 | + - 3๋ฒ์งธ ์นธ์์๋ ์ต๋ 4๋ฒ์งธ ์นธ๊น์ง ๊ฐ ์ ์๋ค. ์ฆ, ์ ์ด๋ 3๋ฒ ์นธ๊น์ง ๊ฐ๋ฉด ์ฑ๊ณต์ด๋ฏ๋ก |
| 11 | + reach_at_least๋ฅผ 3์ผ๋ก ์
๋ฐ์ดํธ ํ๋ค. |
| 12 | + - 2๋ฒ์งธ ์นธ์์๋ ์ต๋ 3๋ฒ์งธ ์นธ๊น์ง ๊ฐ ์ ์๋ค. reach_at_least๋ฅผ 2๋ก ์
๋ฐ์ดํธ ํ๋ค. |
| 13 | + - 1๋ฒ์งธ ์นธ์์๋ ์ต๋ 1+3=4๋ฒ์งธ ์นธ๊น์ง ๊ฐ ์ ์๋ค. ์ด ์นธ์์ ํ reach_at_least ๊ฐ์ธ 2๋ฒ์งธ ์นธ๊น์ง |
| 14 | + ์ถฉ๋ถํ ๊ฐ ์ ์์ผ๋ฏ๋ก reach_at_least ๊ฐ์ 1๋ก ์
๋ฐ์ดํธ ํ๋ค. |
| 15 | + - 0๋ฒ์งธ ์นธ์์๋ ์ต๋ 0+2=2๋ฒ์งธ ์นธ๊น์ง ๊ฐ ์ ์๋ค. ํ reach_at_least ๊ฐ์ธ 1๋ฒ์งธ ์นธ๊น์ง ์ถฉ๋ถํ |
| 16 | + ๊ฐ ์ ์์ผ๋ฏ๋ก reach_at_least ๊ฐ์ 0์ผ๋ก ์
๋ฐ์ดํธ ํ๋ค. |
| 17 | + - 0๋ฒ์งธ ์นธ์์ ๋ ์นธ๊น์ง ๊ฐ ์ ์๋ค. |
| 18 | + - example 2: [3,2,1,0,4] |
| 19 | + - 4๋ฒ์งธ ์นธ์ ๋๋ฌํ ์ ์์ผ๋ฉด ์ฑ๊ณต์ด๋ค. reach_at_least ๊ฐ์ 4๋ก ์ด๊ธฐํ ํ๋ค. |
| 20 | + - 3๋ฒ์งธ ์นธ์์๋ ์ต๋ 3๋ฒ์งธ ์นธ๊น์ง ๊ฐ ์ ์๋ค. ์ฌ๊ธฐ์๋ ํ reach_at_least ๊ฐ์ธ 4๊น์ง ๊ฐ ์ ์์ผ๋ |
| 21 | + ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๋๋ค. |
| 22 | + - 2๋ฒ์งธ ์นธ์์๋ ์ต๋ 2+1=3๋ฒ์งธ ์นธ๊น์ง ๊ฐ ์ ์๋ค. ์ฌ๊ธฐ์๋ ํ reach_at_least ๊ฐ์ธ 4๊น์ง ๊ฐ ์ ์๊ณ , |
| 23 | + ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๋๋ค. |
| 24 | + - 1๋ฒ์งธ ์นธ์์๋ ์ต๋ 1+2=3๋ฒ์งธ ์นธ๊น์ง ๊ฐ ์ ์๋ค. ๋น์ทํ๊ฒ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๋๋ค. |
| 25 | + - 0๋ฒ์งธ ์นธ์์๋ ์ต๋ 0+3=3๋ฒ์งธ ์นธ๊น์ง ๊ฐ ์ ์๋ค. ๋น์ทํ๊ฒ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๋๋ค. |
| 26 | + - reach_at_least ๊ฐ์ด 0์ด ์๋๋ค. ์ฆ, 0๋ฒ์งธ ์นธ์์๋ ๋ ์นธ๊น์ง ๊ฐ ์ ์๋ค. |
| 27 | +
|
| 28 | +SC: |
| 29 | +- reach_at_least ๊ฐ์ ์ธ๋ฑ์ค ํ๋๋ง ๊ด๋ฆฌํ๋ค. ์ฆ, O(1). |
| 30 | +
|
| 31 | +TC: |
| 32 | +- nums์ ๋์์ ๋ ๋ฒ์งธ ์์ดํ
๋ถํฐ ์ฒซ ๋ฒ์งธ ์์ดํ
๊น์ง ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ๋ฉด์ reach_at_least๊ฐ์ ์
๋ฐ์ดํธ ํ๋ค. O(n). |
| 33 | +""" |
| 34 | + |
| 35 | + |
| 36 | +class Solution: |
| 37 | + def canJump(self, nums: List[int]) -> bool: |
| 38 | + reach_at_least = len(nums) - 1 |
| 39 | + |
| 40 | + for i in range(len(nums) - 2, -1, -1): |
| 41 | + if nums[i] + i >= reach_at_least: |
| 42 | + reach_at_least = i |
| 43 | + |
| 44 | + return reach_at_least == 0 |
0 commit comments