Problem
자연수 배열 nums
는 각 인덱스에서 이동할 수 있는 최대 거리를 의미합니다.
마지막 인덱스에 도달 가능한 최소 이동 횟수를 구하는 문제입니다.
Solution
BFS 로 짰다가 시간초과가 나서 Discuss 참고했습니다.
Greedy 로 O(n)
에 답을 구할 수 있습니다.
간단히 변수 설명을 하자면 count
는 우리가 구하려는 답, 즉 이동한 횟수입니다.
currMax
는 현재 구간 (count
) 에서 가장 멀리 점프 할 수 있는 인덱스입니다.
nextMax
는 가장 멀리 점프할 수 있는 인덱스입니다.
핵심은 count
를 구하는 방법인데 i
를 순차적으로 증가시키면서 currMax
와 만나면 count
를 증가시킵니다.
count
를 구간이라고 생각하면 됩니다.
현재 i
부터 currMax
구간에서 최대한 점프할 수 있는 거리를 구해서 nextMax
로 저장합니다.
currMax
에 도달할 때마다 점프 횟수를 한번 사용한 것이므로 count
를 하나 증가시키고 currMax
를 다음 이동가능한 구간인 nextMax
로 변경해줍니다.
문제에서 항상 마지막 인덱스에 도착할 수 있다는 조건이 있기 때문에 nextMax
는 항상 마지막 인덱스로 끝나게 됩니다.
Java Code
class Solution {
public int jump(int[] nums) {
int count = 0, currMax = 0, nextMax = 0;
for (int i = 0; i < nums.length - 1; i++) {
nextMax = Math.max(nextMax, i + nums[i]);
if (i == currMax) {
count++;
currMax = nextMax;
}
}
return count;
}
}
'알고리즘 문제 > LeetCode' 카테고리의 다른 글
[LeetCode Medium] Find First and Last Position of Element in Sorted Array (Java) (0) | 2020.12.31 |
---|---|
[LeetCode Medium] Find All Anagrams in a String (Java) (0) | 2020.12.31 |
[LeetCode Medium] Top K Frequent Elements (Java) (0) | 2020.12.29 |
[LeetCode Medium] Subsets (Java) (0) | 2020.12.29 |
[LeetCode Easy] Reverse Integer (Java) (0) | 2020.12.29 |