-
백준 2252번 줄 세우기(자바) - 위상정렬 알고리즘코딩테스트 2022. 7. 21. 17:10
2252번: 줄 세우기
첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의
www.acmicpc.net
import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static ArrayList<ArrayList<Integer>> graph = new ArrayList<>(); static int[] indegree; static int n; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); int m = sc.nextInt(); indegree = new int[n+1]; for (int i = 0; i <= n; i++) { graph.add(new ArrayList<>()); } for (int i = 0; i < m; i++) { int a = sc.nextInt(); int b = sc.nextInt(); graph.get(a).add(b); indegree[b]++; } topologySort(); } static void topologySort() { Queue<Integer> que = new LinkedList<>(); ArrayList<Integer> result = new ArrayList<>(); for (int i = 1; i <= n; i++) { if (indegree[i] == 0) { que.offer(i); } } while (!que.isEmpty()) { int now = que.poll(); result.add(now); for (int i = 0; i < graph.get(now).size(); i++) { indegree[graph.get(now).get(i)]--; if (indegree[graph.get(now).get(i)] == 0) que.offer(graph.get(now).get(i)); } } for (int i = 0; i < result.size(); i++) { System.out.print(result.get(i) + " "); } } }
'코딩테스트' 카테고리의 다른 글
백준 1005번 ACM Craft(자바) - 위상정렬 (0) 2022.07.25 백준 2665번 미로만들기(자바) - bfs, 우선순위큐* (0) 2022.07.25 백준 16953번 A -> B(자바) - bfs (0) 2022.07.21 백준 1956번 운동(자바) - 플로이드 워셜 (0) 2022.07.20 백준 10423번 전기가 부족해(자바) - 크루스칼 알고리즘, MST * (0) 2022.07.18