Development Palette

b1697_숨바꼭질 본문

Algorithm/Baekjoon

b1697_숨바꼭질

징주 2021. 9. 18. 02:15

 

 

1697번: 숨바꼭질

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

www.acmicpc.net

package com.hotfive.workbook.b1697_숨바꼭질;

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

public class Main {
    static int V;
    static int second;
    static int [] visited;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        V = sc.nextInt(); //0 ≤ N ≤ 100,000
        int K = sc.nextInt(); //0 ≤ K ≤ 100,000
        second = 0;
        visited = new int[100001]; // index가 위치, 값은 second
        if(V!=K) bfs(V,K);

        System.out.println(second);
        sc.close();
    }

    private static void bfs(int v, int k) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(v);
        visited[v]++;
        //System.out.println(v + " "+visited[v]);
        while (!queue.isEmpty()){
            v = queue.poll();

            int next = 0;
            for (int i = 0; i < 3; i++) {
                switch (i){
                    case 0 : next = v + 1;
                        break;
                    case 1 : next = v - 1;
                        break;
                    case 2 : next = v * 2;
                        break;
                }
                if(next>=0 && next <=100000 && visited[next]==0) {
                    visited[next] = visited[v] + 1; // 이동전의 시간 + 1

                    if(next == k){
                        second = visited[next]-1;
                        return;
                    }
                    queue.add(next);
                }

                //System.out.println(next + " "+visited[next]);
            }

        }
    }
}

이동하는 위치를 index로 가지는 배열을 만들어서 BFS를 실행하였다.

이동하는 방법은 3가지이기 때문에 세가지 전부 해봐야한다. 그래서 for문으로 세번 반복하게끔 처리하였다.

배열에 해당 위치마다 몇초가 지났는지 알 수 있게끔 값을 저장하고, 한번 이동할 때마다 1씩 증가하게끔 이동 전의 시간 + 1 을 해주었다.

주의: 배열을 사용하기 때문에 다음 이동하는 위치가 ArrayIndex 벗어나지 않게 next>=0 && next <=100000 로 처리해줘야한다.

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

b2606_바이러스  (0) 2021.09.18
b2667_단지번호붙이기  (0) 2021.09.18
b1012_유기농배추  (0) 2021.09.18
b2178_미로탐색  (0) 2021.09.18
b1268_DFS와BFS  (0) 2021.09.16
Comments