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);
}
}
}
}