๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 11724๋ฒˆ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 2. 7.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 11724๋ฒˆ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

ํ•ด๊ฒฐ๋ฒ•

์—ฐ๊ฒฐ ์š”์†Œ(Connected Component) ๋ฌธ์ œ๋Š” ๋Œ€ํ‘œ์ ์ธ DFS์™€ BFS ๋ฌธ์ œ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ œ๊ฐ€ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ์ด๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ 7๊ฐœ์˜ ๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋Š” ์ด 3๊ฐœ๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ ‘๊ทผ๋ฒ•

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์œ„์—์„œ ์ฐพ์€ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.

 

์–ด๋–ป๊ฒŒ ํ• ๊นŒ?


๊ทธ๋ž˜ํ”„ ๊ฐ ๋…ธ๋“œ์—์„œ DFS๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ฒ˜์Œ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งŒ ์ˆ˜๋ฅผ Count ํ•ด์ฃผ๊ณ  (๋ฐฉ๋ฌธ ์ด๋ ฅ์ด ์—†๋Š” ๋…ธ๋“œ์ผ ๋•Œ๋งŒ) ํƒ์ƒ‰ ๋๋‚œ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ๋…ธ๋“œ 1๋ฒˆ ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณต ํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

์™œ๋ƒ๋ฉด 1๋ฒˆ ๋…ธ๋“œ๊ฐ€ 2, 3, 5๋ฒˆ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค๋ฉด 1๋ฒˆ ๋…ธ๋“œ๋งŒ DFS๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์š”์†Œ๋Š” ์ด๋ฏธ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด 2๋ฒˆ๊ณผ 3๋ฒˆ, 5๋ฒˆ ๊ฐ๊ฐ DFS๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค ํ•ด๋„ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์š”์†Œ๋กœ ๋ณด๊ณ  DFS๊ฐ€ ๋Œ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ๋ชจ๋“  ์š”์†Œ์— ๋Œ€ํ•ด์„œ DFS๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ์—ฐ๊ฒฐ ์š”์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌผ๋ก  ์ด ๋ฌธ์ œ๋Š” DFS๋‚˜ BFS ๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•ด๋ณด์ž.

์ •๋‹ต ์ฝ”๋“œ

public class Main {
    static ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
    static boolean[] visited;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String[] nm = br.readLine().split(" ");
        int n = Integer.parseInt(nm[0]);
        int m = Integer.parseInt(nm[1]);
        visited = new boolean[n + 1];
        for(int i = 0; i <= n; i++) {
            graph.add(new ArrayList<>());
        }

        while(m-- > 0) {
            String[] uv = br.readLine().split(" ");
            int u = Integer.parseInt(uv[0]);
            int v = Integer.parseInt(uv[1]);

            graph.get(u).add(v);
            graph.get(v).add(u);
        }
        int answer = 0;
        for (int i = 1; i <= n; i++) {
            if(dfsByRecursive(i)) {
                answer += 1;
            }
        }

        bw.write(String.valueOf(answer));
        bw.flush();
        bw.close();
    }

    private static boolean dfsByRecursive(int x) {
        if(visited[x]) {
            return false;
        }else {
            visited[x] = true;
            int size = graph.get(x).size();
            for (int i = 0; i < size; i++) {
                int value = graph.get(x).get(i);
                if(!visited[value]){
                    dfsByRecursive(value);
                }
            }
            return true;
        }
    }

    private static boolean bfs(int x) {
        Queue<Integer> queue = new LinkedList<>();

        if(visited[x]) {
            return false;
        }else {
            queue.add(x);
            visited[x] = true;

            while(!queue.isEmpty()) {
                x = queue.remove();
                int size = graph.get(x).size();
                for(int i = 0; i < size; i++) {
                    int value = graph.get(x).get(i);
                    if(!visited[value]) {
                        queue.add(value);
                        visited[value] = true;
                    }
                }
            }
            return true;
        }
    }
}

 

๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์ž˜ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€