04
04

โ–ถ ์œ ํ˜•

  • ์œ ํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ์ •์ ๋“ค์„ ๋ณ€์˜ ๋ฐฉํ–ฅ์„ ๊ฑฐ์Šค๋ฅด์ง€ ์•Š๋„๋ก ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค
  • ์ •์  ๊ฐ„ ์ˆœ์„œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ฐ›์•„๋“ค์ด๋ฉด ๋œ๋‹ค.
  • ์œ„์ƒ์ •๋ ฌ์ด ์„ฑ๋ฆฝํ•˜๋ ค๋ฉด ์œ ํ–ฅ๊ทธ๋ž˜ํ”„(indegree, outdegree)๋ฉด์„œ ์‚ฌ์ดํด์ด ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค. 

์œ„์ƒ์ •๋ ฌ์€ ๊ฐ ์ •์ ์˜ ์ง„์ž…์ฐจ์ˆ˜๋ฅผ ์„ธ๋ฉด์„œ ์ง„ํ–‰ํ•œ๋‹ค. 

์‹œ์ž‘ํ•  ๋•Œ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ์ •์ ๋“ค์„ ์Šคํƒ์— ๋„ฃ๊ณ  ์ •์ ์„ ๊บผ๋‚ด๋ฉด์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ธ์ ‘์ •์ ์˜ ์ง„์ž… ์ฐจ์ˆ˜๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค ์ธ์ ‘์ •์ ์˜ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด ๋˜๋ฉด ๊ทธ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์ง‘์–ด๋„ฃ๋Š”๋‹ค.

โ–ถ ์ „๋žต

์ˆœ์„œ๋Œ€๋กœ ๊ทธ๋ ค๋ณด์ž

์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ 1,3,4๋ฅผ ๋จผ์ € ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค(ํ์—ฌ๋„ ์ƒ๊ด€์—†์„๊ฒƒ๊ฐ™๋‹ค)

์ง„์ž… ์ฐจ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋„ฃ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง„์ž…์ฐจ์ˆ˜๋งŒ ๊ด€๋ฆฌํ•ด์ค„ ๋ฐฐ์—ด์„ ํ•˜๋‚˜ ์„ ์–ธํ•ด์ค˜์•ผํ•œ๋‹ค.

๊ทธ ๋‹ค์Œ ์Šคํƒ์—์„œ ๋นผ๋ฉด์„œ ์ธ์ ‘ํ•œ ์ •์ ์˜ ์ง„์ž…์ฐจ์ˆ˜๋ฅผ ํ™•์ธํ•œ๋‹ค. -> 2, 7, 6์ด๋‹ค(pop๋˜๋ฉด์„œ ์ง„์ž…์ฐจ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ์†Œ์‹œํ‚จ๋‹ค)

์ •์  2์˜ ์ง„์ž…์ฐจ์ˆ˜๊ฐ€ 0์ด๋์œผ๋‹ˆ๊นŒ pushํ•˜๊ณ , popํ•˜๋ฉด์„œ ์ธ์ ‘ํ•œ ์ •์ ์˜ ์ง„์ž…์ฐจ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ๋‚ฎ์ถ˜๋‹ค.

6, 7์ด ์ง„์ž…์ฐจ์ˆ˜ 0๋˜๋ฉด์„œ pushํ•˜๊ณ , popํ•œ๋‹ค -> 5๊ฐ€ ๋งˆ์ง€๋ง‰์— ๋‚จ๋Š”๋‹ค

๋ณด๋‹ค๋ณด๋ฉด ์ง„์ž…์ฐจ์ˆ˜๊ฐ€ ์ œ์ผ ์ž‘์€๊ฒƒ ๋ถ€ํ„ฐ ๋„ฃ์œผ๋ฉด ๋˜์ง€์•Š์„๊นŒํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. -> ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž...

๊ผญ ์šฐ์„ ์ˆœ์œ„ํ๊ฐ€ ์•„๋‹ˆ์–ด๋„ indegree๋ฐฐ์—ด๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋•Œ๋ฌธ์— ์ƒ๊ด€์—†์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

# ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ

https://www.acmicpc.net/problem/1766

 

1766๋ฒˆ: ๋ฌธ์ œ์ง‘

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ˆ˜ N(1 ≤ N ≤ 32,000)๊ณผ ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ •๋ณด์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋‘ ์ •์ˆ˜์˜ ์ˆœ์„œ์Œ A,B๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ

www.acmicpc.net

์•„์ฃผ ์œ„์ƒ์ •๋ ฌ ๊ทธ ์ž์ฒด์ธ ๋ฌธ์ œ๋‹ค.

๋ฌธ์ œ์—์„œ ์šฐ์„  ์กฐ๊ฑด ์ค‘ ์ •์  ๊ฐ’์ด ์ž‘์€ ๊ฒŒ ์šฐ์„ ์ด๋ผ๋Š” ๋ง์ด ์žˆ์–ด์„œ minHeap์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

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

class Main {
	static int n, m;
	static int[] indegree;
	static List<Integer>[] adj;
	static PriorityQueue<Integer> pq;
	static StringBuilder sb;

	static void topology() {
		for (int i = 1; i <= n; i++) {
			if (indegree[i] == 0)
				pq.add(i);
		}
		while (!pq.isEmpty()) {
			int node = pq.poll();
			sb.append(node).append(" ");
			for (int nxt : adj[node]) {
				indegree[nxt]--;
				if (indegree[nxt] == 0)
					pq.add(nxt);
			}
		}
	}

	public static void main(String[] args) throws Exception {
		//System.setIn(new FileInputStream("res/input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		n = Integer.parseInt(st.nextToken());// ๋ฌธ์ œ์˜์ˆ˜ 1~N๊นŒ์ง€
		m = Integer.parseInt(st.nextToken()); // ๋จผ์ € ํ‘ธ๋Š” ๊ฒŒ ์ข‹์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐœ์ˆ˜
		adj = new ArrayList[n + 1]; // ๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ธ์ ‘๋ฆฌ์ŠคํŠธ
		indegree = new int[n + 1];
		for (int i = 1; i <= n; i++) {
			adj[i] = new ArrayList(); // N๊ฐœ์˜ ์ •์  ์ดˆ๊ธฐํ™”
		}
		pq = new PriorityQueue<Integer>((o1, o2) -> {
			return o1 - o2;
		});
		sb = new StringBuilder();
		for (int i = 0; i < m; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			int from = Integer.parseInt(st.nextToken());
			int to = Integer.parseInt(st.nextToken());
			// to์ •์ ์˜ ์ง„์ž…์ฐจ์ˆ˜๋ฅผ ๋Š˜๋ฆฐ๋‹ค.
			adj[from].add(to);
			indegree[to]++;
		}
		// ์ง„์ž…์ฐจ์ˆ˜๊ฐ€ 0์ธ์• ๋“ค๋งŒ pq์— ๋„ฃ๊ณ  ์‹œ์ž‘ํ•˜๊ธฐ
		topology();
		System.out.println(sb);
	}
}

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^
๋ฐ˜์‘ํ˜•
COMMENT