각 숫자들은 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;
}
