Til11


title: 2025-08-10 author: 강병호 date: 2025-08-10 category: TIL/강병호/2025/08 layout: post —

백준 Q5567

BFS를 통해 풀이

  1. 큐에서 노드 하나 꺼내기
  2. depth가 2면 친구의 친구이니 탐색 중단
  3. 현재 노드의 모든 인접 노드 탐색
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    static class Node {
        int v, d;
        Node(int v, int d) {
            this.v = v;
            this.d = d;
        }
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int m = Integer.parseInt(br.readLine());

        List<List<Integer>> graph = new ArrayList<>();
        for (int i = 0; i <= n; i++) {
            graph.add(new ArrayList<>());
        }

        for (int i = 0; i < m; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            graph.get(a).add(b);
            graph.get(b).add(a);
        }

        boolean[] visited = new boolean[n + 1];
        Queue<Node> q = new ArrayDeque<>();

        visited[1] = true;
        q.add(new Node(1, 0));

        int result = 0;

        while(!q.isEmpty()) {
            Node cur = q.poll();
            if (cur.d == 2) continue;

            for (int nx : graph.get(cur.v)) {
                if (!visited[nx]) {
                    continue;
                }

                visited[nx] = true;
                q.add(new Node(nx, cur.d + 1));
                if (nx != 1){ {
                    result++;
                }}
            }
        }

        System.out.println(result);

    }
}

results matching ""

    No results matching ""