728x90
11060번: 점프 점프
재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로
www.acmicpc.net
헤맸던 부분 (반례)
1x1 미로에 갇혔을 경우, 점프를 하지 않고 도착하기 때문에 0이 출력되어야 한다.
이 부분을 고려하니 해결된 문제. 숨바꼭질과 비슷했다.
package 백준renew;
import java.io.*;
import java.util.*;
public class 실버2_11060_점프점프 {
static int N, cnt;
static int map[];
static int visited[];
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
N = Integer.parseInt(br.readLine());
map = new int[N];
visited = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++) {
map[i] = Integer.parseInt(st.nextToken());
}
BFS();
if(visited[map.length-1] == 0) {
if(N == 1) {
sb.append(visited[map.length-1]);
}else {
sb.append("-1");
}
}else {
sb.append(visited[map.length-1]);
}
System.out.println(sb.toString());
}
static void BFS() {
Queue<Integer> queue = new LinkedList<>();
queue.add(0);
while(!queue.isEmpty()){
int now = queue.poll();
int go = map[now];
for(int i=0; i<go; i++) {
int newX = now + (i+1);
if(newX >= N || visited[newX] != 0) {
continue;
}
queue.add(newX);
visited[newX] = visited[now] + 1;
}
}
}
}
728x90
'코테 > Algorithm' 카테고리의 다른 글
[BOJ] 25418: 정수 a를 k로 만들기 (JAVA) (1) | 2024.02.18 |
---|---|
[BOJ] 2586: 보물섬 (JAVA) (1) | 2024.02.16 |
[BOJ] 7576: 토마토 (JAVA) (0) | 2024.02.13 |
[BOJ] 14716: 현수막 (JAVA) (0) | 2024.02.13 |
[BOJ] 1743: 음식물 피하기 (JAVA) (1) | 2024.02.11 |