๐Ÿƒ๋ฐฑ์ค€ 2252 : ์ค„์„ธ์šฐ๊ธฐ

๊ธ๊ธยท2025๋…„ 12์›” 14์ผ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
29/30

๋ฌธ์ œ

์ค„ ์„ธ์šฐ๊ธฐ
๊ณจ๋“œ 3

๋ฌธ์ œ

N๋ช…์˜ ํ•™์ƒ๋“ค์„ ํ‚ค ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„ธ์šฐ๋ ค๊ณ  ํ•œ๋‹ค. ๊ฐ ํ•™์ƒ์˜ ํ‚ค๋ฅผ ์ง์ ‘ ์žฌ์„œ ์ •๋ ฌํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒ ์ง€๋งŒ, ๋งˆ๋•…ํ•œ ๋ฐฉ๋ฒ•์ด ์—†์–ด์„œ ๋‘ ํ•™์ƒ์˜ ํ‚ค๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๊ทธ๋‚˜๋งˆ๋„ ๋ชจ๋“  ํ•™์ƒ๋“ค์„ ๋‹ค ๋น„๊ตํ•ด ๋ณธ ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ์ผ๋ถ€ ํ•™์ƒ๋“ค์˜ ํ‚ค๋งŒ์„ ๋น„๊ตํ•ด ๋ณด์•˜๋‹ค.

์ผ๋ถ€ ํ•™์ƒ๋“ค์˜ ํ‚ค๋ฅผ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ค„์„ ์„ธ์šฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(1 โ‰ค N โ‰ค 32,000), M(1 โ‰ค M โ‰ค 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ํ‚ค๋ฅผ ๋น„๊ตํ•œ ํšŸ์ˆ˜์ด๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ํ‚ค๋ฅผ ๋น„๊ตํ•œ ๋‘ ํ•™์ƒ์˜ ๋ฒˆํ˜ธ A, B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” ํ•™์ƒ A๊ฐ€ ํ•™์ƒ B์˜ ์•ž์— ์„œ์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ํ•™์ƒ๋“ค์„ ์•ž์—์„œ๋ถ€ํ„ฐ ์ค„์„ ์„ธ์šด ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹ต์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1

3 2
1 3
2 3

์˜ˆ์ œ ์ถœ๋ ฅ 1

1 2 3

์•Œ๊ณ ๋ฆฌ์ฆ˜

์œ„์ƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
์œ„์ƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ์ผ๋ จ์˜ ์ž‘์—…์„ ์ฐจ๋ก€๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

ํ•ด๋‹น ๋ฌธ์ œ๋„ ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„ธ์›Œ์•ผํ•˜๋Š” ๊ฒฝ์šฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ„์ƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

ํ’€์ด

์œ„์ƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ๋ฆ„

์œ„์ƒ์ •๋ ฌ์—๋Š” ๋‘ ๊ฐœ์˜ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  1. ๊ฐ ๋…ธ๋“œ์˜ ์ง„์ž…์ฐจ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด
  2. ๊ฐ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

์ด ๋ฌธ์ œ์—์„œ 1๋ฒˆ์€ ํŠน์ • ํ•™์ƒ ์•ž์— ์„œ๋Š” ํ•™์ƒ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ ,
2๋ฒˆ์€ ํŠน์ • ํ•™์ƒ ๋’ค์— ์„œ์•ผ ํ•˜๋Š” ํ•™์ƒ๋“ค์˜ ๋ชฉ๋ก์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

ํ ์‚ฌ์šฉ

์ดํ›„์— ํ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋“ค์„ ํ์— ๋„ฃ๋Š”๋‹ค.
์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด๋ผ๋Š” ๋œป์€ ์ œ์ผ ์•ž์— ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

๊ทธ ๋‹ค์Œ q๋ฅผ ๋Œ๋ฉด์„œ ํ˜„์žฌ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ๋ฆฌ์ŠคํŠธ์˜ ์ง„์ž… ์ฐจ์ˆ˜๋ฅผ -1 ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด ๋˜๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค.

์ „์ฒด์ฝ”๋“œ

package Algorithm;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;

public class backjoon_์ค„์„ธ์šฐ๊ธฐ {
	public static void main(String[] args) throws FileNotFoundException {
		System.setIn(new FileInputStream("src/input.txt"));
		
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		int M = sc.nextInt();
		
		//์ง„์ž…์ฐจ์ˆ˜๋ฅผ ๋„ฃ์„ ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ
		int[] inDegrees = new int[N +1];
		
		//์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์„ ๋‹ด์„ linkedList ๋งŒ๋“ค๊ธฐ
		LinkedList<Integer>[] map= new LinkedList[N+1];
		for (int i = 0;  i < N + 1; i++) {
			map[i] = new LinkedList<>();
			
		}
		
        //์—ฐ๊ฒฐ๋œ ๊ฐ„์„  ์ถ”๊ฐ€
		for (int i = 0; i < M; i++) {
			int pre = sc.nextInt();
			int next = sc.nextInt();
			
			//์—ฐ๊ฒฐ๋œ ๊ฐ„์„  ์ถ”๊ฐ€ 
			map[pre].add(next);
			
			//์ง„์ž…์ฐจ์ˆ˜ ์ถ”๊ฐ€
			inDegrees[next] += 1;
		}
		
		//ํ ์ƒ์„ฑ
		Queue<Integer> q = new LinkedList<>();
		
		//์ง„์ž…์ฐจ์ˆ˜๊ฐ€ 0์ธ ๊ฒƒ๋“ค ํ์— ๋„ฃ๊ธฐ
		for (int i = 1; i < N +1; i++) {
			if (inDegrees[i] == 0) {
				q.offer(i);
			}
		}
		
		
		List<Integer> answer = new ArrayList<>();
		
		//ํ์—์„œ ํ•˜๋‚˜์”ฉ ๋นผ๋ฉด์„œ ์ง„์ž…์ฐจ์ˆ˜ 0์ธ ๊ฑฐ ์ •๋‹ต ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ
		while(!q.isEmpty()) {
			int curr = q.poll();
			answer.add(curr);
			
			//์—ฐ๊ฒฐ๋œ ๋ฆฌ์ŠคํŠธ์˜ ์ง„์ž…์ฐจ์ˆ˜๋ฅผ -1 ์ฒ˜๋ฆฌํ•˜๊ธฐ
			for (int i = 0; i < map[curr].size(); i++) {
				int next = map[curr].get(i);
				inDegrees[next] -= 1;
				if (inDegrees[next] == 0) {
					q.offer(next);
				}
			}
		}
		
        //์ •๋‹ต ์ถœ๋ ฅ
		for (int i = 0; i < answer.size(); i++) {
			System.out.print(answer.get(i) + " ");
		}
	}
}

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