분류 : BFS
풀이 시간 : 30분
삽질) 풀이 1 : 1 ~ nums[idx]칸씩 이동해보고 되돌아오는 백트래킹으로 풀었으나 시간초과
정답) 풀이 2 : BFS로 1 ~ nums[idx]칸씩 이동하면서 방문 여부 체크
nums
1 <= nums.length <= 3 * 104
0 <= nums[i] <= 105
class Solution {
public int N;
public boolean canJump(int[] nums) {
// 배열의 길이
N = nums.length;
boolean[] visited = new boolean[nums.length];
Queue<Integer> queue = new LinkedList<Integer>();
visited[0] = true;
queue.add(0);
while(!queue.isEmpty()) {
int idx = queue.poll();
// 현재 배열의 위치에서 점프할 수 있는 길이만큼 다 이동해보기
for (int i = 1; i <= nums[idx]; i++) {
int newIdx = idx + i;
// 점프했을 때 범우 밖이거나 이미 방문했었으면 탐색 X
if (!isIn(newIdx) || visited[newIdx])
continue;
// 배열의 끝에 도달했으면 종료
if (newIdx == N - 1)
return true;
visited[newIdx] = true;
queue.add(newIdx);
}
}
return visited[N-1];
}
public boolean isIn(int x) {
if (0 <= x && x < N)
return true;;
return false;
}
}