티스토리 뷰

반응형

문제

https://www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

풀이 코드

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 K = Integer.parseInt(st.nextToken()); //동생 위치
        int[] check = new int[100001]; //방문 표시용 배열 (0 <= 수빈, 동생 <= 100000)
        
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(N);
        int time = 0;
        while (!queue.isEmpty()) {
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                Integer cur = queue.poll();
                if (cur == K) { //현재 위치가 동생 위치와 같아지면 종료.
                    System.out.println(time);
                    return;
                }

                int plus = cur + 1;
                int minus = cur - 1;
                int multi = cur * 2;

                if (plus <= 100000 && check[plus] != 1) {
                    queue.offer(plus);
                    check[plus] = 1;
                }

                if (minus >= 0 && check[minus] != 1) {
                    queue.offer(minus);
                    check[minus] = 1;
                }

                if (multi <= 100000 && check[multi] != 1) {
                    queue.offer(multi);
                    check[multi] = 1;
                }
            }
            time++;
        }
    }
}
반응형
반응형