문제
https://www.acmicpc.net/problem/16928
16928번: 뱀과 사다리 게임
첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으
www.acmicpc.net
문제 설명
문제 풀이
사다리나 뱀을 타고 도착한 곳에도 다른 사다리나 뱀이 연결되어 있을 수도 있다는 것을 기억하자.
코드
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] visit = new int[101];
Arrays.fill(visit, Integer.MAX_VALUE);
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
map.put(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
}
for(int j = 0; j < M; j++) {
st = new StringTokenizer(br.readLine());
map.put(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
}
Queue<Integer> q = new LinkedList<>();
q.offer(1);
visit[1] = 0;
while(!q.isEmpty()) {
int current = q.poll();
while(map.containsKey(current)) {
current = map.get(current);
}
for (int i = 1; i <= 6; i++) {
int next = current + i;
if (next <= 100) {
if (map.containsKey(next)) {
next = map.get(next);
if(visit[next] > visit[current] + 1) {
q.offer(next);
visit[next] = visit[current] + 1;
}
} else {
if(visit[next] > visit[current] + 1) {
q.offer(next);
visit[next] = visit[current] + 1;
}
}
}
}
}
System.out.println(visit[100]);
}
}
'🧑💻코딩 테스트 > 백준 (BOJ)' 카테고리의 다른 글
[코딩테스트/백준 알고리즘] 1074번 - Z (Java, 자바 풀이) (0) | 2023.01.18 |
---|---|
[코딩테스트/백준 알고리즘] 1389번 - 케빈 베이컨의 6단계 법칙 (0) | 2023.01.13 |
[코딩테스트/백준 알고리즘] 1992번 - 쿼드트리 (Java, 자바 풀이) (0) | 2023.01.06 |
[코딩테스트/ 백준 알고리즘] 17626번 - Four Squares (Java, 자바 풀이) (0) | 2023.01.05 |
[코딩테스트/백준 알고리즘] 7576번 - 토마토 (Java, 자바 풀이) (0) | 2022.12.30 |
댓글