leetcode45-Jump Game II

leetcode45-Jump Game II


- idx 0 idx 1 idx 2 idx 3 idx 4
nums 2 3 1 1 4
cntlist 0 float(‘inf’) float(‘inf’) float(‘inf’) float(‘inf’)

cntlist

  • 최소 jump 카운트를 저장하는 리스트
  • 최소 jump 수를 구하기 위한 문제이므로 cntlist에는 최대 값인 inf (양의 무한대) 로 초기화 해 준다.

아래 Table은 cur index의 변화에 따른 cntlist(최소 jump 카운트)의 값 변화를 보여 준다.

- - idx 0 idx 1 idx 2 idx 3 idx 4
nums 2 3 1 1 4
cntlist 0 float(‘inf’) float(‘inf’) float(‘inf’) float(‘inf’)
cntlist의 값 변화
    cur cntlist[cur+1] cntlist[cur+2]    
cur = 0 nums[cur]->2 0 1 1 inf inf
      cur cntlist[cur+1] cntlist[cur+2] cntlist[cur+3]
cur = 1 nums[cur]->3 0 1 1 2 2
        cur cntlist[cur+1]  
cur = 2 nums[cur]->1 0 1 1 2 2
          cur cntlist[cur+1]
cur = 3 nums[cur]->1 0 1 1 2 2
            cur
cur = 4 nums[cur]->4 0 1 1 2 2

최종 결과 Return

return cntlist[-1]

nums[cur+n] 컬럼 로직

if cntlist[cur] +1 < cntlist[cur+1]:	
    cntlist[cur+1] = cntlist[cur] +1	

풀이

class Solution:
    def jump(self, nums: List[int]) -> int:
        
        cntl = [float('inf')] *len(nums)
        cntl[0] = 0
        
        for cur in range(len(nums)):
            for j in range(1, nums[cur]+1):
                #print(cur,j)
                if cur + j >= len(nums): continue
                if cntl[cur] + 1 < cntl[cur+j]:
                    cntl[cur+j] = cntl[cur] + 1
        
        return cntl[-1]