본문 바로가기

백준/BFS & DFS

백준 2644 자바

반응형

 

BFS를 이용하여 풀었습니다.

간단하게 설명하자면

촌수 관계가 Node 역할을 합니다. 이것을 ArrayList에 담고

num과 num1이 몇 촌 사이인지 계산을 해야 합니다.

아래 BFS 구현은

일반적인 BFS문제와 비슷하지만 추가할 것은 int[] arr 배열을 이용해서 촌수 관계를 기록해놔야 합니다.

좀 쉽게 말하자면 어차피 3과 7의 관계를 볼 때 가까운 촌수부터 점점 멀어지므로 이전의 arr[q]에 + 1을 해주는 방식입니다. 

그리고 우리가 찾아야 할 num1과 q가 같다면 그대로 끝을 내주고, 다 찾아봤는데도 못 찾으면 기존의 result값인 -1을 출력하면 됩니다.

import java.util.*;
import java.io.*;
public class Main {

    static ArrayList<Integer>[] list;
    static boolean[] visited;
    static int M, num, num1;
    static int result = -1;
    static int[] arr;


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        list = new ArrayList[N+1];
        arr = new int[N+1];
        visited = new boolean[N+1];

        StringTokenizer st = new StringTokenizer(br.readLine());

        num = Integer.parseInt(st.nextToken());
        num1 = Integer.parseInt(st.nextToken());

         M = Integer.parseInt(br.readLine());

        for (int i = 1; i <= N; i++) {
            list[i] = new ArrayList<>();
        }

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());

            int parent = Integer.parseInt(st.nextToken());
            int child = Integer.parseInt(st.nextToken());

            list[parent].add(child);
            list[child].add(parent);
        }
        BFS(num);
    }

    static void BFS(int R) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(R);

        visited[R] = true;
        while (!queue.isEmpty()) {
         int q = queue.poll();

         if (q == num1) {
             result = arr[q];
             break;
         }

         for (int i: list[q]) {
             if (!visited[i]) {
                 visited[i] = true;
                 arr[i] = arr[q]+1;
                 queue.add(i);
             }
         }
        }
        System.out.println(result);
    }
}
반응형

'백준 > BFS & DFS' 카테고리의 다른 글

백준 11725 자바  (0) 2022.12.29
백준 11724 자바  (0) 2022.12.29
백준 2606 자바  (0) 2022.12.28
백준 24445 자바  (0) 2022.12.28
백준 24444 자바  (1) 2022.12.28