[LeetCode] 55. Jump Game

lkdcode·2023년 8월 24일

Algorithm

목록 보기
10/47
post-thumbnail

55. Jump Game


문제 분석

각 숫자들은 0 ~ n까지 다음 인덱스에 접근할 수 있다는 뜻이다.
[2,3,1,1,4] 배열이 주어지면, 순서대로
2는 3, 1을 갈 수 있다. (2칸)
3은 3, 1, 1, 4를 갈 수 있다. (3칸)
1은 1, 1을 갈 수 있다. (1칸)
1은 1, 4를 갈 수 있다. (1칸)
이러한 규칙속에서 마지막 인덱스에 접근 할 수 있다면 true, 없다면 false 를 반환하는 문제.


풀이 과정

boolean[] check 배열을 선언한다.
시작 인덱스인 0번은 true로 바꿔준다.
주어진 숫자 배열의 반복문을 돌면서 하나씩 값을 꺼낸다.
해당 값이 갈 수 있는 위치를 true로 바꿔주면서
마지막 인덱스에 접근이 가능한지 여부를 확인한다.

주어진 배열을 기준으로 예제

[2, 3, 1, 1, 4] 를 기준으로 한다면,
1. 시작 인덱스(0)인 boolean[0] = true로 바꿔준다.
2. int[0] 은 true이기 때문에 2값을 꺼내온다
3. 2값 만큼 boolean[]을 true로 바꿔준다.
4. 즉, 0,1,2 번 인덱스가 true로 바뀐다.
5. 다음 1번 인덱스로 가서 확인할 때 1번 인덱스가 true이기 때문에 3~4번을 반복해준다.
6. 이러한 조건을 반복하면서 마지막 인덱스에 접근이 가능한지 확인한다.


코드

  public boolean canJump(int[] nums) {
        boolean[] check = new boolean[nums.length];
        check[0] = true;

        for (int i = 0; i < nums.length; i++) {
            if (check[i] && nums[i] >= nums.length) return true;

            if (check[i]) {
                for (int j = i; j <= i + nums[i]; j++) {
                    if (check[nums.length - 1]) return true;
                    check[j] = true;
                }
            }

        }

        return false;
    }  

profile
되면 한다

0개의 댓글