티스토리 뷰

알고리즘

BOJ1697 숨바꼭질 java

kkoon9 2022. 1. 28. 17:05

문제

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.

수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.

입력

첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.

출력

수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.

반례를 생각못했다..

처음부터 같은 위치에 있을 때(N==K)를 고려해줘야 함.

import java.util.*;
import java.io.*;

public class Main {

    static int N, K;
    static boolean[] visit = new boolean[100_000 + 1];
    static int count = 0;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.valueOf(st.nextToken());
        K = Integer.valueOf(st.nextToken());
        if(N==K) {
            System.out.println(0);
            return;
        }
        bfs(N);
        System.out.println(count);
    }

    private static void bfs(int v) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(v);
        while (!queue.isEmpty()) {
            count++;
            int size = queue.size();
            for (int s = 0; s < size; s++) {
                int node = queue.poll();
                visit[node] = true;
                int [] nextLocation = {node + 1, node - 1, node * 2};
                for(int next : nextLocation) {
                    if(next < 0 || next > 100000) continue;
                    if(visit[next]) continue;
                    if(next == K) {
                        queue.clear();
                        return;
                    }
                    visit[next] = true;
                    queue.add(next);
                }

            }
        }
    }
}

'알고리즘' 카테고리의 다른 글

BOJ1012 유기농 배추 java  (0) 2022.01.28
BOJ2606 바이러스 java  (0) 2022.01.28
BOJ1260 DFS와 BFS java  (0) 2022.01.28
BOJ1495 기타리스트 java  (0) 2022.01.25
BOJ9251 LCS java  (0) 2022.01.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함