[BOJ] 14567. ์„ ์ˆ˜๊ณผ๋ชฉ (Prerequisite) (๐Ÿฅ‡, ์œ„์ƒ ์ •๋ ฌ)

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

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

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

๐Ÿ”—

ํ’€์ด

๊ณผ๋ชฉ๋“ค์€ ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ•ด๋‹น ๊ทธ๋ฆผ์—์„œ ์„ ์ˆ˜ ๊ณผ๋ชฉ์€ ํŒŒ๋ž€์„ ์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค. ์„ ์ˆ˜ ๊ณผ๋ชฉ์ด ์—†๋Š” ๊ฒฝ์šฐ 1ํ•™๊ธฐ์— ๋ฐ”๋กœ ๋“ค์„ ์ˆ˜ ์žˆ๊ณ  ํ•ด๋‹นํ•˜๋Š” ๊ณผ๋ชฉ๋“ค์€ 1, 4, 6์ด ๋œ๋‹ค.

1ํ•™๊ธฐ์— ๋“ค์€ ๊ณผ๋ชฉ์„ ์ œ์™ธํ•˜๋ฉด ๋‚จ์€ ๊ณผ๋ชฉ์€ ์œ„์™€ ๊ฐ™๋‹ค. 5๋ฅผ ๋“ฃ๊ธฐ ์œ„ํ•ด์„œ๋Š” 2๋ฅผ ๋จผ์ € ๋“ค์–ด์•ผ ํ•œ๋‹ค. 2ํ•™๊ธฐ์— ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๊ณผ๋ชฉ์€ 2, 3์ด ๋œ๋‹ค.

2, 3์„ ์ˆ˜๊ฐ•ํ•˜๋ฉด ๋‚จ์€ ๊ณผ๋ชฉ์€ 5๊ฐ€ ๋œ๋‹ค. 3ํ•™๊ธฐ์—๋Š” 5๋ฅผ ์ˆ˜๊ฐ•ํ•˜๋ฉด ๋œ๋‹ค.

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[] terms = new int[N+1];
        int[] prerequisite = new int[N+1];
        Map<Integer, List<Integer>> subjects = new HashMap<>();
        for (int i = 0; i < M; i++) {
            int A = sc.nextInt();
            int B = sc.nextInt();
            
            if (!subjects.containsKey(A)) {
                subjects.put(A, new ArrayList<>());
            }
            subjects.get(A).add(B);
            prerequisite[B]++;
        }

        Queue<int[]> queue = new LinkedList<>();
        
        for (int i = 1; i < N+1; i++) {
            if (prerequisite[i] == 0) {
                queue.add(new int[]{i, 0});
            }
        }

        while (!queue.isEmpty()) {
            int[] subInfo = queue.poll();
            
            int subNum = subInfo[0];
            int term = ++subInfo[1];
            terms[subNum] = term;
            if (subjects.getOrDefault(subNum, null) != null) {
                for (int nextSubNum : subjects.get(subNum)) {
                    prerequisite[nextSubNum]--;
                    if (prerequisite[nextSubNum] == 0) {
                        queue.add(new int[]{nextSubNum, term});
                    }
                }
            }
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < N+1; i++) {
            sb.append(terms[i] + " ");
        }

        System.out.println(sb);
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

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