[BOJ]13549 숨바꼭질3.java

전영서·2021년 9월 24일
0

Algorithm

목록 보기
54/89

1.문제

2.코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public 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());
        boolean[] visited = new boolean[100001];

        Queue<Integer> queue = new LinkedList<Integer>();

        queue.add(N);
        visited[N] = true;
        int count = 0;
        while(!queue.isEmpty()){
            int size = queue.size();

            while(size!=0){
                int curr = queue.poll();
                size--;

                if(curr == M){
                    System.out.println(count);
                    return;
                }

                int temp1 = curr-1;
                int temp2 = curr+1;
                int temp3 = curr*2;

                
                while(true) {
                	if(temp3 == M){
                        System.out.println(count);
                        return;
                    }
	                if(temp3<=100000 && !visited[temp3]){
	                    visited[temp3] = true;
	                }
                    if(temp2<=100000 && !visited[temp2]){
                        queue.add(temp2);
                        visited[temp2] = true;
                    }
                	if(temp1>=0 && temp1<=100000 && !visited[temp1]){
                        queue.add(temp1);
                        visited[temp1] = true;
                    }
                	
	                temp1 = temp3-1;
	                temp2 = temp3+1;
	                temp3 = temp3*2;

	                if(temp1>100000 || temp3<=0) break;
                }
            }
            count++;
        }
        br.close();
    }
}

3.Review

숨바꼭질1을 변형한 문제이다. 위치가 2가 될때는 시간이 소모되지 않는 차이점이 있다.
따라서 시간초과가 걸리지 않는
2를 먼저 탐색해주어야 한다. 즉. 탐색 순서에 따라 정답여부가 갈린다.
이 문제에서 주의해야 할점이다.

profile
꾸준히 성실하게

0개의 댓글