반응형
풀이
우선 최솟값을 위해 BFS를 사용했습니다.
1차원 배열을 길이가 100으로 선언하고 0으로 초기화 해줍니다.
해당 인덱스에 사다리나 뱀이 있다면 이동하게되는 위치를 넣어주고
0에서부터 큐에 삽입하여 게임을 시작합시다 !
1~6에 주사위에 따라 전진하면서
해당값을 방문했는지, 범위에 벗어나지 않는지, 배열에 사다리, 뱀이 있는지 판단해주며
100에 도달시 (배열이라 인덱스는 99입니다) 걸린 시간을 출력해주면 되는 문제 입니다 !
import java.io.*;
import java.util.*;
public class Main{
static int[] map;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
map = new int[100];
//사다리
int N = Integer.parseInt(st.nextToken());
//뱀
int M = Integer.parseInt(st.nextToken());
for(int i = 0 ; i < N ; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
map[start - 1] = end - 1;
}
for(int i = 0 ; i < M ; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
map[start - 1] = end - 1;
}
bfs();
}
private static void bfs() {
Queue<Integer> queue = new LinkedList<Integer>();
boolean[] visited = new boolean[100];
queue.offer(0);
visited[0] = true;
int time = 0;
while(! queue.isEmpty()) {
time ++;
int size = queue.size();
for(int i = 0 ; i < size ; i++) {
int cur = queue.poll();
for(int plus = 1 ; plus <= 6 ; plus ++) {
int nx = cur + plus;
if(0 > nx || nx > 99 || visited[nx]) continue;
// 목적지 도착 할때
if(nx == 99) {
queue.clear();
System.out.println(time);
return;
}
// 사다리나 뱀이 없을때
if(map[nx] == 0) {
queue.add(nx);
visited[nx] = true;
}
// 사다리나 뱀이 있을때 방문한 값이 아니라면 큐에 삽입
else {
if(visited[map[nx]]) continue;
queue.add(map[nx]);
visited[map[nx]] = true;
}
}
}
}
}
}
반응형
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[Java/자바 백준 1781] 컵라면 (0) | 2022.03.29 |
---|---|
[Java/자바 백준 23290] 마법사 상어와 복제 (0) | 2022.03.28 |
[Java/자바 백준 16954] 움직이는 미로 탈출 (0) | 2022.03.11 |
[Java/자바 백준 1976] 여행가자 (0) | 2022.03.09 |
[Java/자바 백준 17406] 배열돌리기 4 (0) | 2022.03.08 |