Algorithm

[BOJ][๋ฐฑ์ค€][JAVA] 11724 - ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

devYeON_ 2022. 1. 25. 21:57

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฌธ์ œ ํ’€๋Ÿฌ ๊ฐ€๊ธฐ

 

11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฐ„์„ ์˜ ์–‘ ๋์  u์™€ v๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ™์€ ๊ฐ„์„ ์€ ํ•œ ๋ฒˆ๋งŒ ์ฃผ

www.acmicpc.net

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฌธ์ œ

๋ฐฉํ–ฅ ์—†๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์—ฐ๊ฒฐ ์š”์†Œ (Connected Component)์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

๊ณ„์†ํ•ด์„œ ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด๋‚ด๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋‹ค. ์ฒ˜์Œ์— cycle์„ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ์ธ ์ค„ ์•Œ๊ณ  union-find๋กœ ํ’€์—ˆ๋‹ค๊ฐ€ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์ฝ์œผ๋‹ˆ ๊ทธ๋ƒฅ ์ด ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋งŒ return ํ•˜๋ฉด ๋ผ์„œ bfs๋กœ ํ’€์—ˆ๋‹ค..

๐Ÿ‘ฉ‍๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ

package BOJ.bfs_dfs;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class boj11724_์—ฐ๊ฒฐ์š”์†Œ์˜๊ฐœ์ˆ˜ {
    static int N, M;
    static int[][] graph;
    static boolean isCycler;
    static int result;
    static boolean[] visit;

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

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        result = 0;
        graph = new int[N + 1][N + 1];
        visit = new boolean[N + 1];

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

            int u = Integer.parseInt(st.nextToken());
            int v = Integer.parseInt(st.nextToken());

            graph[u][v] = 1;
            graph[v][u] = 1;

        }

        for (int i = 1; i < N + 1; i++) {
            if (visit[i] == false) {
                bfs(i);
                result++;
            }
        }
        System.out.println(result);

    }

    static void bfs(int value) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(value);
        visit[value] = true;

        while (!q.isEmpty()) {
            int cur = q.poll();
            for (int i = 1; i < N + 1; i++) {
                if (visit[i] == false && graph[cur][i] == 1) {
                    visit[i] = true;
                    q.offer(i);
                }
            }

        }
    }

}

 

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฆฌ๋ทฐ

๋‚ด ์ œ์ถœ

 


ํ”„๋กœ์ ํŠธ ๋•Œ๋ฌธ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์—†๋‹ค ๐Ÿ˜ž๐Ÿ˜ž๐Ÿ˜ž