본문 바로가기

이론/문제풀이

[백준알고리즘 -1697] 숨바꼭질 - Java(BFS)

BFS의 아주 기본이 되는 문제라고 할 수 있다. 크게 까다로운 조건은 없는 것 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;

class Main{

       public static void main(String[] args) throws IOException {
          BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
          String input=in.readLine();
          int SN=Integer.parseInt(input.split(" ")[0]);
          int BN=Integer.parseInt(input.split(" ")[1]);
          
          Queue queue=new LinkedList<Integer>();//BFS수행에 필요한 큐
          Set<Integer> check=new HashSet<>();//해당 좌표를 지났는지의 여부 확인을 위한 Set
          int dist[]=new int[100001];//현 위치에서 index까지 이동한 거리 저장 
          
          // x-1, x+1. 2*x 
          dist[SN]=0; check.add(SN); queue.add(SN);//처음위치 
       
          while(!queue.isEmpty()) {
        	  int now=queue.poll();
        	  if(now==BN) {
        		  System.out.println (dist[now]);
        		  return;
        	  }
        	  if(!check.contains(now-1) && now-1 >l=0) {
        		  queue.add(now-1);
        		  check.add(now-1);
        		  dist[now-1]=dist[now]+1;
        	  }
        	  if(!check.contains(now+1) && now+1<=100000) {
        		  queue.add(now+1);
        		  check.add(now+1);
        		  dist[now+1]=dist[now]+1;
        	  }
        	  if(!check.contains(now*2) && now*2 <=100000) {
        		  queue.add(now*2);
        		  check.add(now*2);
        		  dist[now*2]=dist[now]+1;
        	  }	  
          }	  
          in.close();
     }