[백준] 2252* 줄 세우기 (골드3)

AI·2025년 10월 15일

https://www.acmicpc.net/problem/2252

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
    static int n,m;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        ArrayList<Integer>[] s = new ArrayList[n+1]; // 순서
        for(int i=0;i<=n;i++){
            s[i] = new ArrayList<>();
        }
        int[] c = new int[n+1]; // 앞에 있는 사람의 수

        for(int i=0;i<m;i++){
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            s[a].add(b);
            c[b]++;
        }
        
        // 0 인거 부터 큐에 넣고 c 1씩 감소
        ArrayDeque<Integer> q = new ArrayDeque<>();
        for(int i=1;i<=n;i++){
            if(c[i]==0){
                q.add(i);
            }
        }

        StringBuilder sb = new StringBuilder();
        while(!q.isEmpty()){
            int cur = q.poll();
            sb.append(cur).append(" ");

            for(int next : s[cur]){
                c[next]--;
                if(c[next]==0){
                    q.add(next);
                }
            }
        }

        System.out.println(sb.toString().trim());
    }
}

==
10/17

import java.io.*;
import java.util.*;
public class Main {
    static int n,m;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        ArrayList<Integer>[] student = new ArrayList[n+1];
        for(int i=0;i<=n;i++){
            student[i] = new ArrayList<>();
        }
        int[] s = new int[n+1];
        for(int i=0;i<m;i++){
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            student[a].add(b);
            s[b]++;
        }
       
       ArrayDeque<Integer> q = new ArrayDeque<>();
       for(int i=1;i<=n;i++){
        if(s[i]==0) q.add(i);
       }
       while(!q.isEmpty()){
        int cur = q.poll();

        System.out.print(cur+" ");
        for(int b : student[cur]){
                s[b]--;
                if(s[b]==0) q.add(b);
        }
       }
    }

}

0개의 댓글