Coding Test

[백준] 1697 숨바꼭질 1차원 BFS

연_우리 2022. 2. 12. 19:22
반응형

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

 

1697번: 숨바꼭질

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

www.acmicpc.net

 

 

문제풀이

1차원 BFS이다.

2차원 BFS의 check 변수를 node로 사용한다.

 

 

제출코드

package baekjoon;

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

public class Main1697 {

    static int length = 100000;
    static int[] node = new int[length+1];
    static Queue<Integer> queue = new LinkedList<>();
    static int goal;

    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(System.in);
        int start = scan.nextInt();
        goal = scan.nextInt();

        int time = bfs(start)-1;
        System.out.println(time);
    }

    private static int bfs(int start) {
        queue.offer(start);
        node[start] = 1;   //0초로 하면 방문했는지 알 수 없기때문에 1초로 기재하고, 결과값에서 -1 하기로한다

        while(!queue.isEmpty()){
            int temp = queue.poll();
            //System.out.print("time : " + node[temp] + ", 현재노드 : " + temp + ", 방문노드 : ");

            //움직일 수 있는 방법의 가지 수
            int index = 0;
            for (int i = 0; i < 3; i++) {
                switch (i){
                    case 0 : index = temp-1; break;
                    case 1 : index = temp+1; break;
                    case 2 : index = temp*2; break;
                }

                if(index >=0 && index <= length && node[index] == 0){  //방문하지 않은 곳이라면
                    //node[index] == 0 만 했더니 ArrayIndexOutOfBounds가 발생했다.
                    // index >=0 && index <= length 를 뒤에 붙여주어도 동일하게 오류가 발생했다.
                    queue.offer(index);
                    node[index] = node[temp] + 1;
                }
                //System.out.print(index + ", ");

                if(index == goal){
                    return node[index];
                }
            }
            //System.out.println();
        }
        return 0;
    }

}
반응형
  • 네이버 블러그 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 구글 플러스 공유하기
  • 카카오톡 공유하기