b24444. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ 1

2025. 3. 4. 15:34ยทAlgorithm & Data Structures/BOJ

 

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

 

 

 

๐Ÿ“Œ ์ž๋ฐ”(Java)๋กœ ํ‘ธ๋Š” ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS) - ๋ฐฑ์ค€ 24444 ๋ฌธ์ œ ํ’€์ด ๐Ÿš€


๐Ÿ”Ž ๋ฌธ์ œ ๊ฐœ์š”

์ด ๋ฌธ์ œ๋Š” ๋ฐฑ์ค€ 24444๋ฒˆ - ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ 1 ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„๋ฅผ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS) ํ•˜๋ฉด์„œ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ๊ธฐ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ ์ •์ ์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•˜๋ฉฐ, ๋ฐฉ๋ฌธ ์ˆœ์„œ๋Š” result[] ๋ฐฐ์—ด์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ์˜ˆ์ œ ์ž…๋ ฅ

5 5 1
1 4
1 2
2 3
2 4
3 4

๐Ÿ’ก ์˜ˆ์ œ ์ถœ๋ ฅ

1
2
3
4
5

โžก 1๋ฒˆ ์ •์ ๋ถ€ํ„ฐ BFS ํƒ์ƒ‰ํ•˜๋ฉฐ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ›  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ‘๊ทผ ๋ฐฉ์‹

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰) + ์ •๋ ฌ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

โœ๏ธ ์ฃผ์š” ๊ณ ๋ ค ์‚ฌํ•ญ

โœ” BFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰
โœ” ๊ฐ„์„  ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
โœ” ์ •์  ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ result[] ๋ฐฐ์—ด์— ๊ธฐ๋ก
โœ” ํ(Queue)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ BFS๋ฅผ ๊ตฌํ˜„


๐Ÿ”น Java ์ฝ”๋“œ ํ•ด์„ค

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

public class Main {

    static int N, M, R; // ์ •์  ์ˆ˜, ๊ฐ„์„  ์ˆ˜, ์‹œ์ž‘ ์ •์ 
    static ArrayList<Integer>[] list; // ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
    static boolean[] isVisited; // ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ €์žฅ ๋ฐฐ์—ด
    static Queue<Integer> q = new ArrayDeque<>(); // BFS๋ฅผ ์œ„ํ•œ ํ
    static int[] result; // ๋ฐฉ๋ฌธ ์ˆœ์„œ ์ €์žฅ ๋ฐฐ์—ด

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

        N = stoInt(st.nextToken()); // ์ •์  ๊ฐœ์ˆ˜
        M = stoInt(st.nextToken()); // ๊ฐ„์„  ๊ฐœ์ˆ˜
        R = stoInt(st.nextToken()); // ์‹œ์ž‘ ์ •์ 

        isVisited = new boolean[N + 1]; // ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ๋ฐฐ์—ด
        result = new int[N + 1]; // ๋ฐฉ๋ฌธ ์ˆœ์„œ ๋ฐฐ์—ด
        list = new ArrayList[N + 1];

        inputAndSort(br); // ์ž…๋ ฅ ๋ฐ ์ •๋ ฌ

        BFS(R); // BFS ์‹คํ–‰

        printResult(); // ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    }

    // ์ž…๋ ฅ ๋ฐ ์ •๋ ฌ ์ฒ˜๋ฆฌ
    private static void inputAndSort(BufferedReader br) throws IOException {
        StringTokenizer st;
        for (int i = 0; i <= N; i++) {
            list[i] = new ArrayList<>();
        }

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

            int a = stoInt(st.nextToken());
            int b = stoInt(st.nextToken());

            list[a].add(b);
            list[b].add(a);
        }

        // ๊ฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        for (int i = 0; i <= N; i++) {
            Collections.sort(list[i]);
        }
    }

    // ๋ฌธ์ž์—ด์„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
    static int stoInt(String s) {
        return Integer.parseInt(s);
    }

    // BFS ๊ตฌํ˜„
    static void BFS(int r) {
        int count = 1; // ๋ฐฉ๋ฌธ ์ˆœ์„œ ์นด์šดํŠธ
        q.add(r);
        isVisited[r] = true;

        while (!q.isEmpty()) {
            int now = q.poll();
            result[now] = count++;

            for (int i = 0; i < list[now].size(); i++) {
                int num = list[now].get(i);
                if (!isVisited[num]) {
                    q.add(num);
                    isVisited[num] = true;
                }
            }
        }
    }

    // ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    private static void printResult() {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= N; i++) {
            sb.append(result[i]).append("\n");
        }
        System.out.println(sb);
    }
}

๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

๐Ÿ“Œ 1. ์ž…๋ ฅ ์ฒ˜๋ฆฌ ๋ฐ ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐํ™”

N = stoInt(st.nextToken()); // ์ •์  ๊ฐœ์ˆ˜
M = stoInt(st.nextToken()); // ๊ฐ„์„  ๊ฐœ์ˆ˜
R = stoInt(st.nextToken()); // ์‹œ์ž‘ ์ •์ 

isVisited = new boolean[N + 1]; // ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ๋ฐฐ์—ด
result = new int[N + 1]; // ๋ฐฉ๋ฌธ ์ˆœ์„œ ๋ฐฐ์—ด
list = new ArrayList[N + 1];
  • ์ •์  ๊ฐœ์ˆ˜(N), ๊ฐ„์„  ๊ฐœ์ˆ˜(M), ์‹œ์ž‘ ์ •์ (R) ์„ ์ž…๋ ฅ๋ฐ›์Œ
  • isVisited[] ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋ก
  • result[] ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์ €์žฅ
  • list[] ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ €์žฅ

๐Ÿ“Œ 2. ๊ฐ„์„  ์ •๋ณด ์ž…๋ ฅ ๋ฐ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

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

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

    int a = stoInt(st.nextToken());
    int b = stoInt(st.nextToken());

    list[a].add(b);
    list[b].add(a);
}

// ๊ฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
for (int i = 0; i <= N; i++) {
    Collections.sort(list[i]);
}
  • ArrayList[]๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ๊ฐ„์„  ์ •๋ณด๋ฅผ ์ €์žฅ
  • ์ •์  ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•˜๊ธฐ ์œ„ํ•ด Collections.sort()๋กœ ์ •๋ ฌ

๐Ÿ“Œ 3. BFS ํƒ์ƒ‰

BFS(R);
  • ์‹œ์ž‘ ์ •์ (R)๋ถ€ํ„ฐ BFS ํƒ์ƒ‰์„ ์‹œ์ž‘

๐Ÿ“Œ 4. BFS ํƒ์ƒ‰ ๊ตฌํ˜„

static void BFS(int r) {
    int count = 1; // ๋ฐฉ๋ฌธ ์ˆœ์„œ ์นด์šดํŠธ
    q.add(r);
    isVisited[r] = true;

    while (!q.isEmpty()) {
        int now = q.poll();
        result[now] = count++;

        for (int i = 0; i < list[now].size(); i++) {
            int num = list[now].get(i);
            if (!isVisited[num]) {
                q.add(num);
                isVisited[num] = true;
            }
        }
    }
}
  • BFS๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ๊ธฐ๋ก
  • ํ(Queue)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ์ƒ‰
  • ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ๋ฐฉ๋ฌธ

๐Ÿ“Œ 5. ๊ฒฐ๊ณผ ์ถœ๋ ฅ

private static void printResult() {
    StringBuilder sb = new StringBuilder();
    for (int i = 1; i <= N; i++) {
        sb.append(result[i]).append("\n");
    }
    System.out.println(sb);
}
  • ๊ฐ ์ •์ ์˜ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅ

๐Ÿ”ฅ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„

์—ฐ์‚ฐ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ˆ˜ํ–‰ ํšŸ์ˆ˜ ์‹œ๊ฐ„ ๋ณต์žก๋„
๊ฐ„์„  ์ž…๋ ฅ ๋ฐ ์ •๋ ฌ M log M O(M log M)
BFS ํƒ์ƒ‰ N + M O(N + M)
์ดํ•ฉ   O(N + M log M)

โœ… ๋น ๋ฅธ BFS ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ทธ๋ž˜ํ”„์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๋”๋ผ๋„ ํšจ์œจ์ 


๐Ÿ† ์ •๋ฆฌ

โœ… ํ•ต์‹ฌ ํฌ์ธํŠธ

โœ” BFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ๊ธฐ๋ก
โœ” ์ •์ ์ด ์ž‘์€ ์ˆซ์ž๋ถ€ํ„ฐ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
โœ” ๋ฐฉ๋ฌธ ์ˆœ์„œ๋Š” result[] ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ


๐ŸŽฏ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์žฅ์ 

โœ… BFS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰ ๊ฐ€๋Šฅ
โœ… ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ + ์ •๋ ฌ์„ ํ†ตํ•ด ์ •์  ๋ฐฉ๋ฌธ ์ˆœ์„œ ์ œ์–ด ๊ฐ€๋Šฅ
โœ… O(N + M log M) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํšจ์œจ์ ์ธ ํƒ์ƒ‰ ๊ฐ€๋Šฅ


์ด ๊ธ€์ด ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ์ข‹์•„์š”์™€ ๊ณต์œ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

 

 

'Algorithm & Data Structures > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

b.1707 ์ด๋ถ„ ๊ทธ๋ž˜ํ”„  (0) 2025.03.12
b24445. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ 2  (1) 2025.03.06
b24480. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ 2  (0) 2025.03.01
b3015. ์˜ค์•„์‹œ์Šค ์žฌ๊ฒฐํ•ฉ  (0) 2025.02.25
b.1725 ํžˆ์Šคํ† ๊ทธ๋žจ  (0) 2025.02.06
'Algorithm & Data Structures/BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • b.1707 ์ด๋ถ„ ๊ทธ๋ž˜ํ”„
  • b24445. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ 2
  • b24480. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ 2
  • b3015. ์˜ค์•„์‹œ์Šค ์žฌ๊ฒฐํ•ฉ
Geisha
Geisha
๊ฐœ๋ฐœ ์ผ๊ธฐ
  • Geisha
    Geisha
    Geisha
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (329) N
      • Algorithm & Data Structures (249) N
        • BOJ (107) N
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (27)
        • SQL (21)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • ์šด์˜์ฒด์ œ (13)
        • ๋„คํŠธ์›Œํฌ (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ด๋ถ„ํƒ์ƒ‰
    ์ „์œ„์ˆœํšŒ
    ๋ฐฑ์ค€
    DynamicProgramming
    ๊ณจ๋“œ
    Union-Find
    Dijkstra
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    Java
    SQL
    ๊ฒฝ๋กœ์••์ถ•
    ๋ฐฑํŠธ๋ž˜ํ‚น
    BFS
    ํˆฌํฌ์ธํ„ฐ
    binarySearch
    ๊ตฌํ˜„
    ๋™์ ๊ณ„ํš๋ฒ•
    ์Šคํƒ
    dp
    PriorityQueue
    baekjoon
    ์ž๋ฐ”
    dfs
    Stack
    programmers
    ํ›„์œ„์ˆœํšŒ
    algorithm
    ๋‹ค์ต์ŠคํŠธ๋ผ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์œ ๋‹ˆ์˜จํŒŒ์ธ๋“œ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Geisha
b24444. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ 1
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”