본문 바로가기
알고리즘/정렬

백준 14567번 : 선수과목 (Prerequisite) java

by LDY3838 2022. 7. 19.
반응형

이 문제는 위상 정렬을 이용하여 주어진 조건에 맞게 각 과목을 이수하려면 몇 학기가 걸리는지를 구하는 문제입니다.

위상 정렬을 이용하는 방법은 아래 링크를 참고하시면 좋을 것 같습니다.

 

백준 1516번 : 게임 개발 java

이 문제는 위상 정렬을 이용하여 건물들을 순서대로 완성시키는 알고리즘입니다. 이 문제를 해결하기 위해서는 자신보다 선행되어야 하는 정점들이 걸리는 시간에 지금 정점에서 걸리는 시간

dy-coding.tistory.com


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

public class Main {
    static int N;
    static List<List<Integer>> l = new ArrayList<>();
    static int[] parentNum;
    static int[] answer;

    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        parentNum = new int[N+1];
        answer = new int[N+1];
        for(int i = 0; i<=N; i++)
            l.add(new ArrayList<>());

        while(M-->0){
            st = new StringTokenizer(br.readLine());

            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());

            l.get(A).add(B);
            parentNum[B]++;
        }

        topologicalSort();

        for(int i = 1; i<=N; i++)
            System.out.print(answer[i]+" ");
        System.out.println();
    }

    static void topologicalSort(){
        Queue<Integer> q = new LinkedList<>();

        for(int i = 1; i<=N; i++)
            if(parentNum[i] == 0){
                q.offer(i);
                answer[i] = 1;
            }

        while(!q.isEmpty()){
            int num = q.poll();

            for(int i : l.get(num)){
                parentNum[i]--;

                if(parentNum[i] == 0){
                    q.offer(i);
                    answer[i] = answer[num] + 1;
                }
            }
        }
    }
}
반응형

'알고리즘 > 정렬' 카테고리의 다른 글

백준 2637번 : 장난감 조립 java  (0) 2022.07.25
백준 1766번 : 문제집 java  (0) 2022.07.24
백준 2056번 : 작업 java  (0) 2022.07.14
백준 1516번 : 게임 개발 java  (1) 2022.07.13
백준 2252번 : 음악프로그램 java  (0) 2022.07.11

댓글