공부공간

BOJ_16928 ) 뱀과 사다리 게임 본문

알고리즘/완전탐색(BFS,DFS)

BOJ_16928 ) 뱀과 사다리 게임

개발자가될수있을까? 2022. 3. 11. 22:17


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

 


뱀을 타고 내려가는 것이 이득인 경우가 있을 수 있다.

따라서 모든 경우를 탐색하는 완전탐색 문제이며, bfs로 쉽게 풀린다.

 

큐에 탐색할때에 <현재좌표, 횟수> 를 탐색하면서 현재좌표를 더 낮은 횟수로 올 수 있을때에만

 

탐색을 진행한다.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;

public class BOJ_16928 {

	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 max = 987654321;
       int time [] = new int[101];
       int up   [] = new int[101];
       int down [] = new int[101];
       for(int i=1;i<101;i++) time[i] = max;
       
       for(int i=0;i<N;i++) {
    	   st = new StringTokenizer(br.readLine());
    	   int index =  Integer.parseInt(st.nextToken());
    	   int tar   =  Integer.parseInt(st.nextToken());
    	   up[ index ] = tar ;
    	}
       for(int i=0;i<M;i++) {
    	   st = new StringTokenizer(br.readLine());
    	   int index =  Integer.parseInt(st.nextToken());
    	   int tar   =  Integer.parseInt(st.nextToken());
    	   down[ index ] = tar ;
       }
       
       int answer = max;
       ArrayDeque<int []> dq = new ArrayDeque<>(); // 1좌표 , 2횟수
       dq.add(new int[] {1,0});
       while(!dq.isEmpty()) {
    	   int now[] = dq.poll();
    	      for(int i=1;i<=6;i++) {
                	int next = now[0]+i ;
                	if(next>=101) continue;
                	if(up[next]!=0) {next = up[next];}
                	if(down[next]!=0) {next = down[next];}
                	if(time[next] >=now[1]+1) {
                		time[next] =now[1]+1;
                		if(next==100) {
                			answer = answer > now[1]+1 ? now[1]+1 : answer;
                		}
                		dq.add(new int[] {next, now[1]+1});
                	}
                }
    	   
    	}
        System.out.println(answer);
	}
}

'알고리즘 > 완전탐색(BFS,DFS)' 카테고리의 다른 글

BOJ - 25307 ) 시루의 백화점 구경  (0) 2022.07.08
BOJ - 1525 ) 퍼즐  (0) 2022.06.25
BOJ - 23747 ) 와드  (0) 2022.01.25
BOJ - 13463 ) Brexit  (0) 2022.01.19
BOJ - 1584 ) 게임  (0) 2021.10.17
Comments