Contents

๋ฐฑ์ค€ 5237๋ฒˆ, Connected or Not Connected (with.Java)

   Feb 23, 2025     4 min read

๋ฐฑ์ค€ 5237๋ฒˆ Connected or Not Connected (with.Java) ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณธ ๊ธ€์ž…๋‹ˆ๋‹ค.

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ, ํ’€์—ˆ๋˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํšŒ๊ณ ์™€ ๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋ฉฐ, ์•Œ์•„๊ฐ€๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ

Sam๊ณผ Quorra๋Š” (๊ฐ€์ƒ) ๊ฒฝ๋กœ๋กœ ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ์—ฌ๋Ÿฌ (๊ฐ€์ƒ) ์‚ฌ์ดํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” Grid ์„ธ๊ณ„์˜ ๋น„๋ฐ€ ๊ธฐ์ง€ ์ง€๋„๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ์‚ฌ์ดํŠธ ์ˆ˜(n)๋ฅผ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์‚ฌ์ดํŠธ ๊ฐ„์˜ ์ƒํ˜ธ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ง€์‹์€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ง€ ๋‚ด์— ์žˆ๋˜ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ๋“ค์€ ์‚ฌ์ดํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Sam๊ณผ Quorra๋Š” ์ด๋ฅผ ์ข…ํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ, ๊ทธ๋“ค์€ ๋ชจ๋“  ์‚ฌ์ดํŠธ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ๋ชฉํ‘œ๋Š” ์ง€์ •๋œ ์—ฐ๊ฒฐ ์„ธํŠธ๊ฐ€ ๋ชจ๋“  ์‚ฌ์ดํŠธ์—์„œ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋ฅผ ํ™•๋ณดํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ์ด ์–‘๋ฐฉํ–ฅ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์‚ฌ์ดํŠธ 1๊ณผ ์‚ฌ์ดํŠธ 2 ์‚ฌ์ด์— ์—ฐ๊ฒฐ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์‚ฌ์ดํŠธ 1์—์„œ ์‚ฌ์ดํŠธ 2๋กœ, ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜(โ‰ค 50)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ํ›„ ๊ฐ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋Š” ์‚ฌ์ดํŠธ์˜ ์ˆ˜, n(โ‰ค 100)์ž…๋‹ˆ๋‹ค.

์‚ฌ์ดํŠธ๋Š” 0์—์„œ n - 1๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง‘๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋Š” ์‚ฌ์ดํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ ์ˆ˜, k(โ‰ค 200)์ž…๋‹ˆ๋‹ค.

๊ทธ ํ›„ ๊ฐ ์—ฐ๊ฒฐ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ k์Œ์˜ ์ˆซ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด ๋ฐ˜๋ณต๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋” ๋‚˜์•„๊ฐ€ ์ž์ฒด ์—ฐ๊ฒฐ (์ฆ‰, ์‚ฌ์ดํŠธ์—์„œ ์ž์ฒด๋กœ์˜ ์—ฐ๊ฒฐ)์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ๋ชจ๋“  ์‚ฌ์ดํŠธ์—์„œ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ด์— ๋”ฐ๋ผ โ€œ์—ฐ๊ฒฐ๋จโ€ ๋˜๋Š” โ€œ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Œโ€์„ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ’€์ด

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < T; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int K = Integer.parseInt(st.nextToken());

            List<Integer>[] graph = new ArrayList[N];
            for(int j = 0; j < N; j++){
                graph[j] = new ArrayList<>();
            }

            for(int j = 0; j < K; j++){
                int u = Integer.parseInt(st.nextToken());
                int v = Integer.parseInt(st.nextToken());
                graph[u].add(v);
                graph[v].add(u);
            }

            boolean[] visited = new boolean[N];
            dfs(0, graph, visited);

            boolean isConnected = true;
            for(int j = 0; j < N; j++){
                if(!visited[j]){
                    isConnected = false;
                    break;
                }
            }

            sb.append(isConnected ? "Connected.\n" : "Not connected.\n");
        }

        System.out.print(sb);
    }

    private static void dfs(int node, List<Integer>[] graph, boolean[] visited){
        visited[node] = true;
        for(int next : graph[node]){
            if(!visited[next]){
                dfs(next, graph, visited);
            }
        }
    }
}

ํ’€์ด ์„ค๋ช…

์ด ์ฝ”๋“œ๋Š” ์ฃผ์–ด์ง„ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

๋จผ์ €, BufferedReader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ์„ ๋น ๋ฅด๊ฒŒ ์ฝ์–ด์˜ค๋ฉฐ ์ฒซ ๋ฒˆ์งธ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜ T๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ดํ›„, ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ๋…ธ๋“œ ๊ฐœ์ˆ˜ N๊ณผ ๊ฐ„์„  ๊ฐœ์ˆ˜ K๋ฅผ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„๋˜๋ฉฐ, List[] graph = new ArrayList[N]; ๋ฅผ ์„ ์–ธํ•˜์—ฌ ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ for ๋ฌธ์„ ์ด์šฉํ•ด ๋…ธ๋“œ ๊ฐœ์ˆ˜๋งŒํผ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ดํ›„ K๊ฐœ์˜ ๊ฐ„์„  ์ •๋ณด๋ฅผ ์ฝ์–ด์™€ ํ•ด๋‹น ๋…ธ๋“œ ์Œ์„ ์„œ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„๊ฐ€ ์™„์„ฑ๋˜๋ฉด DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)๋ฅผ ์ด์šฉํ•ด ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด boolean ๋ฐฐ์—ด visited๋ฅผ ์„ ์–ธํ•˜๊ณ , dfs(0, graph, visited) ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ 0๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

DFS ํ•จ์ˆ˜๋Š” ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌํ•œ ํ›„ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์„ ํ™•์ธํ•˜๋ฉฐ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ†ตํ•ด ํƒ์ƒ‰์„ ๊ณ„์† ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํƒ์ƒ‰์ด ๋๋‚œ ํ›„ visited ๋ฐฐ์—ด์„ ํ™•์ธํ•˜๋ฉฐ, ํ•˜๋‚˜๋ผ๋„ false์ธ ๋…ธ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•˜์—ฌ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Œ์„ ์ถœ๋ ฅํ•˜๊ณ , ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋˜์—ˆ๋‹ค๋ฉด ์—ฐ๊ฒฐ๋จ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.