본문 바로가기
코딩 문제 풀이/백준

[백준] 자바 문제 풀이 1766 : 골드2

by 코딩하는 랄로 2023. 10. 4.
728x90

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() + " ");
	}

}
728x90