[BOJ] 2252. ์ค„ ์„ธ์šฐ๊ธฐ (๐Ÿฅ‡, ์œ„์ƒ ์ •๋ ฌ)

lemythe423ยท2024๋…„ 1์›” 11์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
99/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

A B ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด A๊ฐ€ B์˜ ์•ž์— ์„ ๋‹ค๋Š” ๋œป์ด ๋œ๋‹ค. ์–ด๋–ค ์ˆœ์„œ๋กœ ์ค„์„ ์„œ๊ฒŒ ๋˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋กœ ๋‹ต์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒ˜์Œ์—๋Š” dp๋‚˜ ๋ˆ„์ ํ•ฉ ์ •๋„๋กœ ํ’€ ์ˆ˜ ์žˆ๊ฒ ๋‹ค ์ƒ๊ฐํ•˜๊ณ  A ๊ฐ€ ์•ž์— ์žˆ์œผ๋‹ˆ -1์„ ํ•˜๊ณ  B ๊ฐ€ ๋’ค์— ์žˆ์œผ๋‹ˆ +1์„ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์–ด๋Š ์ •๋„ ์•ž์— ์žˆ๋Š”์ง€, ์–ด๋Š ์ •๋„ ๋’ค์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฐ€์ง€๊ณ  ํŒ๋‹จํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ๋Š” ํ†ต๊ณผํ•˜๋Š”๋ฐ ๋ณต์žกํ•œ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋ฅผ ๋ˆ ๊ฒฝ์šฐ๋Š” ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ฐพ์•„๋ณด๋‹ˆ ์œ„์ƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋‹ค.

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

์œ„์ƒ ์ •๋ ฌ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 2๊ฐ€์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ง„์ž…์ฐจ์ˆ˜์™€ ํ•ด๋‹น ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋‹ค์Œ ์ •์ ์— ๋Œ€ํ•œ ์ •๋ณด์ด๋‹ค. ์ง„์ž…์ฐจ์ˆ˜๋Š” ํ•ด๋‹น ์ •์ ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์ •์ ์˜ ๊ฐœ์ˆ˜์ด๊ณ , ์—ฐ๊ฒฐ๋œ ๋‹ค์Œ ์ •์ ์— ๋Œ€ํ•œ ์ •๋ณด๋“ค์€ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.

์ง„์ž…์ฐจ์ˆ˜๊ฐ€ 0์ธ ์ •์ ๋ถ€ํ„ฐ ์‹œ์ž‘์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์‹œ์ž‘ ์ •์ ์˜ ๊ฐœ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์ผ ์ˆ˜ ์žˆ๋‹ค. ์ง„์ž…์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋ชจ๋“  ์ •์ ์— ๋Œ€ํ•ด ํ์— ์ €์žฅํ•˜๊ณ  ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ์ •์ ๋“ค์— ๋Œ€ํ•ด ์ง„์ž…์ฐจ์ˆ˜๋ฅผ 1์”ฉ ๊นŽ์•„์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด๋‚˜๊ฐ€๋ฉด์„œ ๋˜ ์ƒˆ๋กญ๊ฒŒ ์ง„์ž…์ฐจ์ˆ˜๊ฐ€ 0์ด ๋˜๋Š” ์ •์ ๋“ค์— ๋Œ€ํ•ด ํ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ํ์—์„œ ๊บผ๋‚ด๋Š” ์ˆœ์„œ๊ฐ€ ์œ„์ƒ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•œ ์ˆœ์„œ๊ฐ€ ๋œ๋‹ค.

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

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();

        int[] inDegree = new int[N]; // ์ง„์ž… ์ฐจ์ˆ˜
        List<List<Integer>> graph = new ArrayList<>();
        for (int i = 0; i < N; i++) {
            graph.add(new ArrayList<>());
        }

        int A;
        int B;
        for (int i = 0; i < M; i++) {
            A = sc.nextInt();
            B = sc.nextInt();
            inDegree[B-1]++;
            graph.get(A-1).add(B-1);
        }

        Queue<Integer> queue = findStart(inDegree);

        StringBuilder sb = new StringBuilder();
        while (!queue.isEmpty()) {
            int node = queue.poll();
            sb.append(node+1)
              .append(" ");

            List<Integer> linkedNode = graph.get(node);
            for (Integer i : linkedNode) {
                inDegree[i]--;
                if (inDegree[i] == 0) {
                    queue.add(i);
                }
            }
        }

        System.out.println(sb);
    }

    private static Queue<Integer> findStart(int[] inDegree) {
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < inDegree.length; i++) {
            if (inDegree[i] == 0) {
                queue.add(i);
            }
        }
        return queue;
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€