in.add()

[1697] 숨바꼭질 본문

Algorithm/BOJ

[1697] 숨바꼭질

idan 2021. 9. 28. 20:24

문제 링크 : https://www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

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

www.acmicpc.net

 

문제 해결 방법

bfs를 사용해서 구현했다.

2%쯤에서 실패가 떴는데, N == K 일 때 바로 끝내도록 해서 통과할 수 있었다. 

 

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    static int N, K, answer;
    static boolean flag;
    static boolean[] visit;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        K = sc.nextInt();
        flag = false;
        visit = new boolean[100001];

        hideAndSeek();

        System.out.println(answer);
    }

    public static void hideAndSeek() {
        if(N == K) return;

        Queue<Integer> q = new LinkedList<>();
        q.add(N);
        visit[N] = true;

        int cnt = 0;
        while (!q.isEmpty()) {
            int size = q.size();
            cnt++;
            for (int i = 0; i < size; i++) {
                int cur = q.poll();

                if (chk(cur * 2)) { // 순간이동 해볼까
                    q.add(cur * 2);
                    visit[cur * 2] = true;
                }
                if (chk(cur + 1)) { // 한 칸 앞으로 가볼까
                    q.add(cur + 1);
                    visit[cur + 1] = true;
                }
                if (chk(cur - 1)) { // 한 칸 뒤로 가볼까
                    q.add(cur - 1);
                    visit[cur - 1] = true;
                }

                if (flag) {
                    answer = cnt;
                    return;
                }
            }
        }
    }

    public static boolean chk(int idx) {
        if (idx == K) {
            flag = true;
        }
        return idx >= 0 && idx <= 100000 && !visit[idx];
    }
}

'Algorithm > BOJ' 카테고리의 다른 글

[1931] 회의실 배정  (0) 2021.10.02
[1194] 달이 차오른다, 가자.  (0) 2021.09.29
[16928] 뱀과 사다리 게임  (0) 2021.09.23
[2667] 단지 번호 붙이기  (0) 2021.09.22
[17472] 다리 만들기 2  (0) 2021.09.18
Comments