๋ฐ์ํ
[BOJ] 2252๋ฒ ์ค ์ธ์ฐ๊ธฐ
https://www.acmicpc.net/problem/2252
๋ฌธ์ ์ ๊ทผ
์์ ์ ๋ ฌ์ ํตํด์ ์ฝ๊ฒ ํผ ๋ฌธ์ ์ด๋ค.
์์ ์ ๋ ฌ์ด๋ ์ํ์ด ์๋ ๊ทธ๋ํ์์ ์ ์ ๊ฐ์ ์์๋ฅผ ๊ตฌํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๊ฐ๊ฐ์ ํ์๋ค์ ์ ์ ์ด๋ผ๊ณ ์๊ฐํ๊ณ , ์
๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ์์๋ค์ ๊ทธ๋ํ๋ค์ ๊ฐ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๊ฒ ๋ฌธ์ ๊ฐ ํ๋ฆฐ๋ค.
์์ ์ ๋ ฌ์ด๋ ์ฐ์ ๋ค์ด์ค๋ ๊ฐ์ ์ ๊ฐ์๋ฅผ ์ธ๋ linkCnt์ ๊ฐ์ด 0์ธ ์ ์ ๋ค์ ํ์ ๋ฃ๊ณ , ํ๋์ฉ ํ์์ ๋นผ๋ฉด์ ํด๋น ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ๋ค์ ๋ํด์ linkCnt๋ฅผ -1 ํด์ฃผ๊ณ ๋ค์ linkCnt์ ๊ฐ์ด 0์ธ ์ ์ ๋ค์ ํ์ ๋ฃ๋ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค.
Code
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class BOJ2252 {
static int N;
static int M;
static int[] linkCnt;
static ArrayList<ArrayList<Integer>> graph;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
linkCnt = new int[N + 1];
graph = new ArrayList<>();
for(int i = 0; i<=N; i++){
graph.add(i, new ArrayList<>());
}
for(int i = 0; i<M; i++){
int from = sc.nextInt();
int to = sc.nextInt();
graph.get(from).add(to);
linkCnt[to]++;
}
System.out.println(topologicalSort());
}
public static String topologicalSort() {
Queue<Integer> q = new LinkedList<>();
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= N; i++) {
if(linkCnt[i] == 0) q.offer(i);
}
while (!q.isEmpty()) {
int cur = q.poll();
for (int v : graph.get(cur)) {
linkCnt[v] --;
if(linkCnt[v] == 0) q.offer(v);
}
sb.append(cur).append(" ");
}
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
}
}
๋ฐ์ํ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Java][๋ฐฑ์ค] 2775๋ฒ ๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ (0) | 2022.11.14 |
---|---|
[Algorithm/Java][๋ฐฑ์ค] 14226๋ฒ ์ด๋ชจํฐ์ฝ (0) | 2022.06.05 |
[Algorithm/Java][๋ฐฑ์ค] 1197๋ฒ ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2022.05.22 |
[Algorithm/Java][๋ฐฑ์ค] 1916๋ฒ ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (0) | 2022.05.20 |
[Algorithm/Java][๋ฐฑ์ค] 1806๋ฒ ๋ถ๋ถํฉ (0) | 2022.05.18 |