11-01 00:00
- Today
- Total
													Link
													
												
											
												
												
											
									개발하는 고라니
[백준] 16928번 : 뱀과 사다리 게임 본문
반응형
    
    
    
  16928번: 뱀과 사다리 게임
첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으
www.acmicpc.net
[Dijkstra]
BFS로 풀어보았으나 풀다보니 다익스트라 알고리즘이 더 풀기 쉬울 것 같아서 급히 방향을 바꾸어서 풀었다.
map[ ]이라는 배열을 만들어서 i번 째 원소의 값은 i로 초기화한다. 그리고 n, m만큼 뱀과 사다리의 정보를 받아 해당 map[ i ]의 값을 바꾸고 다익스트라 알고리즘을 수행하면 된다.
# Code </>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
    static class Point{
        int x, m;
        public Point(int xx, int move){
            x=xx;
            m=move;
        }
    }
    static final int INF = 1000000000;
    static int[] map = new int[101], move = new int[101];
    static int Dijkstra(){
        Queue<Point> Q = new PriorityQueue<>((a, b) -> a.m - b.m);
        move[1] = 0;
        Q.add(new Point(1, 0));
        while(!Q.isEmpty()){
            Point p = Q.poll();
            int cur = p.x;
            int m = p.m;
            if(move[cur] < m) continue;
            for(int i=1; i<7; i++){
                int next = cur + i;
                if(next > 100) continue;
                if(move[ map[next] ] > m+1) {
                    move[map[next]] = move[cur] + 1;
                    Q.add(new Point(map[next], m + 1));
                }
            }
        }
        return move[100];
    }
    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());
        for(int i=1; i<=100; i++) {
            map[i] = i;
            move[i] = INF;
        }
        for(int i=0; i<n; i++){
            st = new StringTokenizer(br.readLine());
            int target = Integer.parseInt(st.nextToken());
            int dest = Integer.parseInt(st.nextToken());
            map[target] = dest;
        }
        for(int i=0; i<m; i++){
            st = new StringTokenizer(br.readLine());
            int target = Integer.parseInt(st.nextToken());
            int dest = Integer.parseInt(st.nextToken());
            map[target] = dest;
        }
        System.out.println(Dijkstra());
    }
}반응형
    
    
    
  'Programming > 백준' 카테고리의 다른 글
| [백준] 16947번 : 서울 지하철 2호선 (0) | 2021.04.08 | 
|---|---|
| [백준] 16933번 : 벽 부수고 이동하기 3 (0) | 2021.04.08 | 
| [백준] 16948번 : 데스 나이트 (0) | 2021.04.08 | 
| [백준] 17616번 : 등수 찾기 (0) | 2021.04.03 | 
| [백준] 16724번 : 피리 부는 사나이 (0) | 2021.04.02 | 
			  Comments
			
		
	
               
           
					
					
					
					
					
					
				