์ƒˆ์†Œ์‹

IN DEPTH CAKE/Supercoder

[์ฝ”๋”ฉ/LeetCode150-(9)] 55. Jump Game

  • -
๋ฐ˜์‘ํ˜•

 

 

๋ณธ ๊ธ€์€ LeetCode Top Interview 150์— ์ •๋ฆฌ๋œ ๋ฌธ์ œ๋ฅผ ์š”์•ฝํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ํ’€์ด๋ฅผ ํฌํ•จํ•˜๊ณ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณธ ํฌ์ŠคํŒ… ์‹œ๋ฆฌ์ฆˆ๋Š” 150 list์˜ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ผ์„œ ๊ฒŒ์žฌ๋ฉ๋‹ˆ๋‹ค. ํ’€์ด ์–ธ์–ด๋Š” python์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋‚œ์ด๋„Medium

ํ‚ค์›Œ๋“œ: Array, DP

 

๋ฌธ์ œ

 

๋ฌธ์ œ ์›๋ฌธ: https://leetcode.com/problems/jump-game/description/?envType=study-plan-v2&envId=top-interview-150 

 

์ •์ˆ˜ํ˜• ๋ฐฐ์—ด nums๊ฐ€ ์ฃผ์–ด์กŒ๋‹ค๊ณ  ํ•˜์ž. ๋‹น์‹ ์€ ์ฒ˜์Œ์— ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ index์— ์œ„์น˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” ํ•ด๋‹น ์œ„์น˜์—์„œ๋ถ€ํ„ฐ ๋‹น์‹ ์ด ์ตœ๋Œ€๋กœ ์ ํ”„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด ๋•Œ, ๋งˆ์ง€๋ง‰ index ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ true, ์•„๋‹Œ ๊ฒฝ์šฐ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ.

 

์˜ˆ์ œ ์ž…๋ ฅ

Input: nums = [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
Input: nums = [3,2,1,0,4]
Output: false
Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.

 

๋ฌธ์ œ ํ’€์ด

ํ’€์ด 1. DP (Top-down approach)

๋ฌธ์ œ์—์„œ ๊ฐ€๋Šฅ์„ฑ ์—ฌ๋ถ€๋ฅผ ๋ฌผ์–ด๋ณด๊ณ ์žˆ๊ณ , ์ด ๋•Œ ๋ช‡ ๋ฒˆ์งธ index๋ฅผ ์„ ํƒํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๋งˆ์ง€๋ง‰ index์—์˜ ๋„๋‹ฌ ์—ฌ๋ถ€๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Dynamic Programming์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ ์žํ•œ๋‹ค. ์šฐ์„ , ๋ณ„๋„์˜ ์ตœ์ ํ™” ์—†์ด ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” Top-Down approach๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1) ์ข…๋ฃŒ ์กฐ๊ฑด์€ ๋งˆ์ง€๋ง‰ index์— ๋„๋‹ฌํ•˜๋Š”๊ฒฝ์šฐ return True

2) ๊ทธ ๋‹ค์Œ state๋Š” ํ˜„์žฌ ์œ„์น˜ i์—์„œ๋ถ€ํ„ฐ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋†’์ด๊นŒ์ง€์˜ ๊ฐ๊ฐ์˜ ์œ„์น˜์—์„œ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ์—ฌ๋ถ€ ํƒ์ƒ‰

-> ํ•˜๋‚˜๋ผ๋„ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•˜๋ฉด return True

-> ๋ชจ๋‘ ์กฐํšŒํ•ด๋ณด๊ณ  ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด return False

 

์ด๋ฅผ ์ข…ํ•ฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        
        @cache
        def dp(i):
            if i >= len(nums)-1:
                return True
            for j in range(i+1, i+nums[i]+1):
                if dp(j):
                    return True
            return False
        
        return dp(0)

๐Ÿ•ฐ Runtime 5495 ms 

๐Ÿ’ป Memory 56.1 MB

 

ํ’€์ด 2. DP (Bottom-up approach)

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ 1์€ ์•„๋ฌด๋ž˜๋„ overhead๋กœ์ธํ•ด ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ recursion์„ array ์ˆœํšŒ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ, ๋ฐฉ์‹ 1์˜ ์ข…๋ฃŒ์กฐ๊ฑด์—์„œ๋ถ€ํ„ฐ ์—ญ์œผ๋กœ 0 index๊นŒ์ง€ ๋„๋‹ฌ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

 

class Solution:
    def canJump(self, nums: List[int]) -> bool:

        N = len(nums)
        if N == 1:
            return True

        dp = [False] * N

        # basecase
        dp[-1] = True
        for i in range(len(nums)-1,-1,-1):
            for j in range(i+1, min(i+nums[i]+1, N)):
                if dp[j]:
                    dp[i] = True
                    break
        
        return dp[0]

 

๐Ÿ•ฐ Runtime 2499 ms

๐Ÿ’ป Memory 17.5 MB

 

ํ’€์ด 3. DP (Bottom-up approach) ๋ณ€ํ˜•

 

DP ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ตณ์ด ์ „์ฒด dp์— ๋Œ€ํ•œ ์ˆœํšŒ๋ฅผ ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ตœ๋Œ€ ์ตœ์†Œ ๊ฐ’์„ ๋ฌป๋Š”๊ฒŒ์•„๋‹ˆ๋ผ ๊ทธ๋ƒฅ ๊ฐ€๋Šฅ์„ฑ์„ ๋ฌผ์–ด๋ณด๋Š”๊ฒƒ์ด๊ธฐ๋•Œ๋ฌธ์—. ๊ทธ๋ž˜์„œ ๋ชฉ์ ์ง€ (top)๋ฅผ ๋งค๋ฒˆ ๊ฐฑ์‹ ํ•ด์ฃผ๊ณ  ํ˜„์žฌ step์—์„œ ๋ชฉ์ ์ง€์— ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์˜€๋‹ค.

 

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        
        N, top = len(nums), len(nums)-1
        for i in range(N-2,-1,-1):
            if (i + nums[i] >= top):
                top =  i
        return True if (top == 0) else False

๐Ÿ•ฐ Runtime 384 ms

๐Ÿ’ป Memory 17.5 MB

 

 

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

# ๋กœ๋”ฉ ํ™”๋ฉด ๋™์ž‘ ์ฝ”๋“œ(Code) ์„ค์ •ํ•˜๊ธฐ