Algorithm

[java] jump game 2

KOOCCI 2022. 6. 22. 00:22

[참고 문제] : https://leetcode.com/problems/jump-game-ii/

 

Jump Game II - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


문제 풀이

생각의 흐름 - DP

Jump 하여 다음에 갈 위치와, 현재의 Score를 계산하는 방식이 필요할 것이라고 생각했다.

고로, DP로 풀이가 가능할 것이라고 판단

 

생각의 흐름 - 메모이제이션

무엇을 저장해야 할까가 그 다음 스텝이였다.

위에서 Score를 떠올렸으므로 nums와 같은 길이의 배열(arr)이 필요하고, 각 Index에 대해 최소한의 스텝으로 jump하는 Count를 비교/저장해야한다고 판단.

 

생각의 흐름 - 초깃값

초깃값은 문제에서 제시가 되었듯, arr의 0번째 Index는 0으로 초기화해야 한다고 판단.

결과적으로, nums가 1개인 경우도 해소되었다.

 

생각의 흐름 - 그냥 해보기

DP를 풀 때, 식이 생각이 안나면 0번째부터 쭉 써서 규칙을 찾는다.

이번에도 마찬가지로 규칙을 찾아서 아래와 같이 풀이하였다.

public int jump(int[] nums) {
    int len = nums.length;
    int[] arr = new int[len];
    Arrays.fill(arr, Integer.MAX_VALUE);
    arr[0] = 0;
    for(int i = 0; i < len; i++) {
        int jump1 = nums[i];
        int k = Math.min(i + jump1, len-1);
        for(int j = i+1; j <= k; j++) {
            arr[j] = Math.min(arr[j], arr[i] + 1);
        }
    }
    return arr[len-1];
}

 

 

'Algorithm' 카테고리의 다른 글

[java] Rotate Array  (0) 2022.06.24
[java] Median of Two Sorted Arrays  (0) 2022.06.23
[java] Longest Substring Without Repeating Characters  (0) 2022.06.23
[Python / C++] 스택 수열  (0) 2019.05.23
[Python] 소수 찾기  (0) 2019.05.23