Jump Game II (Java, C++)

유승선 ·2022년 12월 31일
0

LeetCode

목록 보기
67/122

추억이 있는 문제다. 첫번째 시리즈의 목적이 해당 index에 도달이 가능한지에 대한 여부를 묻는 문제였다면 이번 문제는 해당 index에 도달이 가능한 가장 최소한의 점프를 물어보는 문제다.

이 문제를 생각할때 고민이 많이 들었는데 뭔가 엄청 DP로 최적화 하는 느낌은 안들었다. 결국 완전탐색을 해야하는 구조가 불편했지만 여기서 더 최적화 하는 방법은 내가 아는것보다 좀 더 나아가야만 했었다. 일단 솔루션은 가장 첫번쨰 index는 우리가 시작하는 위치이기 떄문에 최소가 항상 0이다.

그 다음부터는 이중 룹으로 내가 점프할 수 있는 구간만큼 점프한 다음에 그 구간이 가진 현재의 값과 내 위치에서 점프했을때 +1한 값을 비교하면서 마지막에 최소 값을 리턴하면 끝난다.

class Solution {
    public int jump(int[] nums) {
        int[] dp = new int[nums.length]; 
        Arrays.fill(dp,Integer.MAX_VALUE); 
        
        dp[0] = 0; 
        for(int i = 0; i < nums.length; i++){
            for(int j = i; j <= i + nums[i] && j < nums.length; j++){
                dp[j] = Math.min(dp[j],dp[i] + 1); 
            }
        }
        
        return dp[nums.length-1]; 
    }
}
class Solution {
public:
    int jump(vector<int>& nums) {
        vector<int> dp(nums.size(),INT_MAX); 
        dp[0] = 0; 
        for(int i = 0; i < nums.size(); i++){
            for(int j = i; j <= i + nums[i] && j < nums.size(); j++){
                dp[j] = min(dp[j],dp[i] + 1); 
            }
        }
        return dp[nums.size()-1]; 
    }
};
profile
성장하는 사람

0개의 댓글