[leetcode] 55. Jump Game

섬섬's 개발일지·2022년 1월 28일
0

leetcode

목록 보기
19/23

55. Jump Game

Problem

You are given an integer array nums. You are initially positioned at the array's first index, and each element in the array represents your maximum jump length at that position.

Return true if you can reach the last index, or false otherwise.

Example 1:

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.

Example 2:

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.

Constraints:

  • 1<=nums.length<=10^4
  • 0<=nums[i]<=10^5

풀이

  1. dp 배열을 이용
class Solution(object):
    def canJump(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        n = len(nums)
        
        if 0 not in nums :
            return True
        elif n == 1 :
            return True
        
        dp = [False] * n
        dp[0] = True
        for index,num in enumerate(nums) :
            if dp[index] :
                for i in range(1, num+1) :
                    if index+i < n and dp[index+i] == False :
                        dp[index+i] = True
                    
        return dp[n-1]

위의 코드로는 가끔씩 시간 초과가 되기도 한다.

속도가 생각보다 나오지 않아 다른 분의 풀이를 참고하였습니다.

class Solution(object):
    def canJump(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        jumpIndex = nums[0]
        for i in range(1, len(nums)) :
            if jumpIndex >= i :
                jumpIndex = max(jumpIndex, i + nums[i])
        
        return jumpIndex >= len(nums) - 1 or len(nums) == 1

profile
섬나라 개발자

0개의 댓글