๊ธฐ๋ก๋ฐฉ

BOJ_1707 : ์ด๋ถ„ ๊ทธ๋ž˜ํ”„ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1707 : ์ด๋ถ„ ๊ทธ๋ž˜ํ”„

Soom_1n 2024. 4. 13. 01:11

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1707๋ฒˆ: ์ด๋ถ„ ๊ทธ๋ž˜ํ”„

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ๊ทธ๋ž˜ํ”„์˜ ์ •์ ์˜ ๊ฐœ์ˆ˜ V์™€ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ E๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์—

www.acmicpc.net


 


๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, ์ด๋ถ„ ๊ทธ๋ž˜ํ”„์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ํ†ตํ•ด ๊ฐ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์ง‘ํ•ฉ์— ์†ํ•˜๋Š”์ง€ ๊ตฌ๋ถ„ํ•œ๋‹ค.
    • DFS๋กœ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์— ํ•œ๋ฒˆ์€ A์ง‘ํ•ฉ, ํ•œ๋ฒˆ์€ B์ง‘ํ•ฉ์œผ๋กœ ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉฐ ํฌํ•จ์‹œํ‚จ๋‹ค.
    • ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ์ธ๋ฐ, ๊ฐ™์€ ์ง‘ํ•ฉ์ด๋ฉด ์ด๋ถ„ ๊ทธ๋ž˜ํ”„๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„๋กœ ์ด๋ฃจ์–ด ์ ธ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ชจ๋“  ๋…ธ๋“œ์—์„œ DFS๋ฅผ ์‹œ์ž‘ํ•ด๋ณธ๋‹ค.
    • ๋ชจ๋“  ํƒ์ƒ‰ ์ดํ›„ ์ด๋ถ„ ๊ทธ๋ž˜ํ”„ ํŒ์ • ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
    private static ArrayList<Integer>[] adjList;
    private static int[] check;
    private static boolean[] visited;
    private static boolean flag;

    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = null;
        String sb = "";

        int K = Integer.parseInt(br.readLine());

        for (int i = 0; i < K; i++) {
            st = new StringTokenizer(br.readLine());
            int V = Integer.parseInt(st.nextToken());
            int E = Integer.parseInt(st.nextToken());
            check = new int[V + 1];
            visited = new boolean[V + 1];
            flag = true;

            adjList = new ArrayList[V + 1];
            for (int j = 1; j <= V; j++) {
                adjList[j] = new ArrayList<>();
            }

            for (int j = 0; j < E; j++) {
                st = new StringTokenizer(br.readLine());
                int a = Integer.parseInt(st.nextToken());
                int b = Integer.parseInt(st.nextToken());
                adjList[a].add(b);
                adjList[b].add(a);
            }

            // dfs
            for (int j = 1; j <= V; j++) {
                if (flag)
                    dfs(j);
                else
                    break;
            }
            if (flag)
                bw.write("YES\n");
            else
                bw.write("NO\n");
        }

        // Output
        bw.write(sb);
        bw.flush();
    }

    private static void dfs(int node) {
        if (!flag) return;

        visited[node] = true;
        for (int i : adjList[node]) {
            if (!visited[i]) {
                check[i] = (check[node] + 1) % 2;
                dfs(i);
            } else if (check[node] == check[i]) {
                flag = false;
            }
        }
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๋…ธ๋“œ๋ฅผ ์žฌ๊ท€ ๋ฉ”์„œ๋“œ dfs๋กœ ํƒ์ƒ‰ํ•˜๋ฉฐ, ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•˜๋Š” ์ธ์ ‘ ๋…ธ๋“œ์— 0 ๋˜๋Š” 1์„ check๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.
  • ๋งŒ์•ฝ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ๋ฐ, ๊ฐ™์€ ์ˆซ์ž์ด๋ฉด ์‚ฌ์ดํด์ด ๋ฐœ์ƒ ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ด๋ถ„ ๊ทธ๋ž˜ํ”„๊ฐ€ ์•„๋‹ˆ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  •  ๊ทธ๋ž˜ํ”„๋ฅผ ๋‘ ์ง‘ํ•ฉ์œผ๋กœ ๋‚˜๋ˆ ์•ผ ํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ถ„๋ฆฌ ์ง‘ํ•ฉ(Disjoint Set)์œผ๋กœ Union-Find ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋‚˜ ์‹ถ๋‹ค๊ฐ€ BFS๋กœ ํ’€์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„ ์‹œ๋„ํ–ˆ๋”๋‹ˆ 1ํšŒ ํ‹€๋ ธ๋‹ค.
    • ์•Œ๊ณ ๋ณด๋‹ˆ ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ–ˆ๋Š”๋ฐ, ์•„์–˜ ์™•๋ณตํ•  ์ˆ˜ ์—†๋Š” ์ง‘ํ•ฉ์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ง์ ‘ ์—ฐ๊ฒฐ๋งŒ ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
    • ์ด๋ถ„ ๊ทธ๋ž˜ํ”„๋ฅผ ์•„์ง ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ๋” ๊ณต๋ถ€ํ•ด์•ผ ๋  ๊ฒƒ ๊ฐ™๋‹ค.
728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_1976 : ์—ฌํ–‰ ๊ฐ€์ž  (0) 2024.04.22
BOJ_2580 : ์Šค๋„์ฟ   (0) 2024.04.19
BOJ_3190 : ๋ฑ€  (0) 2024.04.11
BOJ_2143 : ๋‘ ๋ฐฐ์—ด์˜ ํ•ฉ  (0) 2024.04.10
BOJ_1644 : ์†Œ์ˆ˜์˜ ์—ฐ์†ํ•ฉ  (0) 2024.04.09