์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค

Eager To Learn ๐ŸŒŒ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/๋ฐ”ํ‚น๋…

[JAVA] ๋ฐฑ์ค€ 20955๋ฒˆ ใ€G4.๋ฏผ์„œ์˜ ์‘๊ธ‰ ์ˆ˜์ˆ ใ€‘

2023. 9. 26. 11:19

๋ฌธ์ œ

 

20955๋ฒˆ: ๋ฏผ์„œ์˜ ์‘๊ธ‰ ์ˆ˜์ˆ 

๋ฏผ์„œ๋Š” ๊ฐ•์›๋Œ€ํ•™๊ต ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ์˜ ์‹ ์ž„ ๊ต์ˆ˜์ด๋‹ค. ๊ทธ๋…€๊ฐ€ ์ €์ˆ ํ•œ ํšจ์œจ์ ์ธ ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ์„ ์œ„ํ•œ ์ตœ์  ๊ฒฝ๋กœ ์„ค๊ณ„์— ๊ด€ํ•œ ์—ฐ๊ตฌ ๋…ผ๋ฌธ์€ ์•„์ง๋„ ๋„๋ฆฌ ์ธ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ์˜ค๋Š˜๋„ ์—ด์‹ฌํžˆ ๊ฐ•์˜๋ฅผ ํ•˜๋˜ ๋ฏผ์„œ

www.acmicpc.net

 

ํ’€์ด

1๏ธโƒฃ ํŠธ๋ฆฌ์˜ ํŠน์ง•๊ณผ bfs ๋ฅผ ์ด์šฉํ•œ ํ’€์ด

๐Ÿ’ก ๋– ์˜ค๋ฅธ Idea

์ด ๋ฌธ์ œ๋Š”, ๋ฌด์ž‘์œ„๋กœ ์ฃผ์–ด์ง€๋Š” ๋…ธ๋“œ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํŠธ๋ฆฌ๊ด€๊ณ„๋กœ ํ’€์–ด๊ฐ€์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋จผ์ €, ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ์ •์ƒ์ ์ธ ํŠธ๋ฆฌ ํ˜•ํƒœ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ์ง‘ํ•ฉ์ธ ๊ฒฝ์šฐ
2. ํŠน์ • ๋…ธ๋“œ ์ง‘ํ•ฉ์ด ์‚ฌ์ดํด์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ
3. 1๋ฒˆ ํ˜น์€ 2๋ฒˆ ๊ฐ™์€ ์ง‘ํ•ฉ์ด ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š๊ณ  ๋–จ์–ด์ ธ ์žˆ๋Š”๊ฒฝ์šฐ

๊ทธ๋ž˜์„œ ๋ชจ๋“  ๋‰ด๋Ÿฐ์„ ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํšŸ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ•ด์•ผํ• ๊นŒ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ

๋จผ์ € 1๋ฒˆ ๊ฐ™์€ ์ง‘ํ•ฉ์˜ ๊ฒฝ์šฐ ๊ฑด๋“œ๋ฆด ๊ฒƒ์ด ์—†๋‹ค.

ํ•˜์ง€๋งŒ 1๋ฒˆ๊ฐ™์€ ์ง‘ํ•ฉ์ด n๊ฐœ๊ฐ€ ์žˆ๊ณ  ์ง‘ํ•ฉ๊ฐ„์— ์—ฐ๊ฒฐ์ด ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์„œ๋กœ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— n-1๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค.

๋”ฐ๋ผ์„œ, bfs๋ฅผ ํ†ตํ•ด์„œ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ง‘ํ•ฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ค€ ํ›„, ๊ทธ ์ง‘ํ•ฉ ๊ฐœ์ˆ˜ -1 ๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

2๋ฒˆ ์ผ€์ด์Šค์˜ ๊ฒฝ์šฐ ์‚ฌ์ดํด์„ ์ด๋ฃจ๊ณ ์žˆ๋‹ค๋ฉด, ์‚ฌ์ดํด์„ ์ œ๊ฑฐํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ

ํŠธ๋ฆฌ์˜ ๋Œ€ํ‘œ์ ์ธ ํŠน์ง• ์ค‘ ํ•˜๋‚˜์ธ, ํŠธ๋ฆฌ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋Š” ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” (๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ -1) ๊ฐœ ๋ผ๋Š” ํŠน์ง•์„ ์ด์šฉํ•˜์—ฌ

ํŠน์ • ์ง‘ํ•ฉ์˜ ์ด ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ ํ›„, (๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ -1)๊ฐœ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ์œ„ํ•ด ์ œ๊ฑฐํ•ด์•ผํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•จ์œผ๋กœ์„œ ์‚ฌ์ดํด์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๊ฐ ์ง‘ํ•ฉ์ด ๋ช‡๊ฐœ์ธ์ง€ ๊ตฌํ•˜๊ณ  ๊ฐ ์ง‘ํ•ฉ์ด ์ด๋ฃจ๋Š” ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

public class Main {
    static List<List<Integer>> nodes;
    static boolean[] checked;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int N = Integer.parseInt(input[0]);
        int M = Integer.parseInt(input[1]);
        nodes = new ArrayList<>();
        for (int i = 0; i < N + 1; i++) {
            nodes.add(new ArrayList<>());
        }
        
        // ๊ฐ„์„  ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ
        for (int i = 0; i < M; i++) {
            input = br.readLine().split(" ");
            int u = Integer.parseInt(input[0]);
            int v = Integer.parseInt(input[1]);
            nodes.get(u).add(v);
            nodes.get(v).add(u);
        }

        checked = new boolean[N + 1];
        int ans = 0;
        int cntOfGroup = 0;

        for (int i = 1; i < N + 1; i++) {
            if (!checked[i]) {
                int[] result = bfs(i);
                ans += (result[1] - (result[0] - 1));
                cntOfGroup++;
            }
        }
        
        ans += cntOfGroup - 1;
        System.out.println(ans);
    }

    private static int[] bfs(int start) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(start);
        checked[start] = true;

        int cntOfEdge = 0;
        int cntOfNode = 0;

        while (!q.isEmpty()) {
            int poll = q.poll();
            cntOfNode++;
            for (int connect : nodes.get(poll)) {
                if (!checked[connect]) {
                    checked[connect] = true;
                    q.offer(connect);
                }
            }
            cntOfEdge += nodes.get(poll).size();
        }
        // ๊ฐ„์„ ์„ ์–‘๋ฐฉํ–ฅ์ด๋ผ ๊ฐ€์ •ํ•˜๊ณ  ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  ๋‚˜๋ˆ„๊ธฐ 2๋ฅผ ํ•˜๋ฉด ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋œ๋‹ค.
        return new int[]{cntOfNode, cntOfEdge/2};
    }

}

๊ฒฐ๊ณผ

    '๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/๋ฐ”ํ‚น๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JAVA] ๋ฐฑ์ค€ 1967๋ฒˆ ใ€G4.ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 2250๋ฒˆ ใ€G2.ํŠธ๋ฆฌ์˜ ๋†’์ด์™€ ๋„ˆ๋น„ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 22856๋ฒˆ ใ€G4.ํŠธ๋ฆฌ ์ˆœํšŒใ€‘
    • [JAVA] ๋ฐฑ์ค€ 5214๋ฒˆ ใ€G2.ํ™˜์Šนใ€‘
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

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