백준 16928525 - 뱀과 사다리 게임
Updated:
Java
16928 번 - 뱀과 사다리 게임
문제
접근 방법
100까지 도착하는 최단 거리는 BFS로 해결 할 수 있다.
사다리나, 뱀을 타는 것은 배열로 나타내었다.
코드
import java.util.*;
import java.io.*;
public class Main {
static int n, m, result;
static int[] move;
static int[] dist;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine());
n = stoi(stk.nextToken());
m = stoi(stk.nextToken());
move = new int[101];
// 사다리
for(int i = 0; i < n; i++) {
stk = new StringTokenizer(br.readLine());
move[stoi(stk.nextToken())] = stoi(stk.nextToken());
}
// 뱀
for(int j = 0; j < m; j++) {
stk = new StringTokenizer(br.readLine());
move[stoi(stk.nextToken())] = stoi(stk.nextToken());
}
dist = new int[101];
Arrays.fill(dist, -1); // -1은 아직 방문하지 않은 상태
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(1);
dist[1] = 0;
int curN, nextN;
while(!queue.isEmpty()) {
curN = queue.poll();
if(dist[100] != -1) {
break;
}
for(int i = 1; i <= 6; i++) {
nextN = curN + i;
if(nextN <= 100) {
// 뱀이나 사다리를 탈 수 있을 때
if(move[nextN] != 0) {
nextN = move[nextN]; // 강제로 이동한다.
}
// 처음 방문한 곳이면
if(dist[nextN] == -1) {
dist[nextN] = dist[curN] + 1;
queue.add(nextN);
}
}
}
}
System.out.println(dist[100]);
br.close();
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}