(LeetCode) 55. Jump Game

55. Jump Game

  • Explore : Interview > Top Interveiw Questions > Medium Collection
  • 분류 : Dynamic Programming
  • 난이도 : Medium

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

1
2
3
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

1
2
3
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

Solution

Exapnder
1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
fun canJump(nums: IntArray): Boolean {
var goal = nums.size - 1

for (i in nums.size - 1 downTo 0) {
if (i + nums[i] >= goal) {
goal = i
}
}
return goal == 0
}
}

Point of Thinking

  • 주어진 element로 마지막 인덱스에 도달할 수 있냐 없냐를 보는 것이 핵심이다.
  • 배열의 앞에서부터 계산하면 모든 경우의 수를 순회해야하니 역으로 계산하면 된다.
  • 가장 마지막 원소로부터 “원소 + 현재 인덱스”의 합이 목표값보다 크면 도달 가능한 것이니 계속해서 인덱스를 앞으로 땡긴다.
  • 마지막에 goal이 0이면 끝의 원소에 도달할 수 있는 것이니 true, 아니면 false를 반환하면 Accepted.