코딩 문제 풀이/백준
[백준] 자바 문제 풀이 1766 : 골드2
코딩하는 랄로
2023. 10. 4. 10:47
반응형
BOJ 1766 : 문제집 풀이 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer str = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(str.nextToken());
int m = Integer.parseInt(str.nextToken());
int[][] mlist = new int[m][2];
for(int i = 0; i < m; i++) {
str = new StringTokenizer(br.readLine(), " ");
mlist[i][0] = Integer.parseInt(str.nextToken());
mlist[i][1] = Integer.parseInt(str.nextToken());
}
int[] indegree = new int[n + 1];
List<List<Integer>> array = new ArrayList<List<Integer>>();
for (int i = 0; i < n + 1; i++)
array.add(new ArrayList<Integer>());
for(int i = 0; i < m; i++) {
int c1 = mlist[i][0];
int c2 = mlist[i][1];
array.get(c1).add(c2);
indegree[c2]++;
}
PriorityQueue<Integer> pq = new PriorityQueue<>();
Queue<Integer> rst = new LinkedList<>();
for(int i = 1; i < n+1; i++) {
if(indegree[i] == 0)
pq.offer(i);
}
while(!pq.isEmpty()) {
int num = pq.poll();
rst.offer(num);
for(Integer i : array.get(num)) {
indegree[i]--;
if(indegree[i] == 0) {
pq.offer(i);
}
}
}
while(!rst.isEmpty())
System.out.print(rst.poll() + " ");
}
}
반응형