Created
March 21, 2019 09:53
BOJ 백준 2252 줄세우기
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.*; | |
import java.util.*; | |
public class Main { | |
static int[] degree; | |
static List<List<Integer>> graph; | |
public static void main(String[] args) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); | |
StringTokenizer st = new StringTokenizer(br.readLine()); | |
Queue<Integer> queue=new LinkedList(); | |
int n=Integer.parseInt(st.nextToken()); //학생 수 | |
int m=Integer.parseInt(st.nextToken()); | |
int a,b; | |
graph=new ArrayList<>(); //인접리스트 | |
degree=new int[n+1]; //차수 | |
for(int i=1; i<=n+1; i++) { //리스트 생성 | |
graph.add(new ArrayList<>()); | |
} | |
for(int i=0; i<m; i++) { //m만큼의 입력을 받는다. | |
st = new StringTokenizer(br.readLine()); | |
a=Integer.parseInt(st.nextToken()); | |
b=Integer.parseInt(st.nextToken()); | |
graph.get(a).add(b); | |
degree[b]++; | |
} | |
for(int i=1; i<=n; i++) { | |
if(degree[i]==0) { //degree가 0이면 큐에 넣는다. | |
queue.add(i); | |
degree[i]=-1; //이미 큐에 들어갔다는 것을 표시 | |
} | |
} | |
for(int i=0; i<n; i++) { | |
if(!queue.isEmpty()) { | |
int x = queue.poll(); //큐에서 뺸 값을 | |
bw.write(x+" "); //출력 | |
for(int j=0; j<graph.get(x).size(); j++) { //큐에서 뺀 x의 인접리스트 | |
degree[graph.get(x).get(j)]--; //인접리스트에 있는 데이터들의 degree를 1씩 감소 | |
if(degree[graph.get(x).get(j)]==0) { //degree가 0 이라면 | |
queue.add(graph.get(x).get(j)); //큐에 추가 | |
degree[graph.get(x).get(j)]=-1; //큐에 | |
} | |
} | |
} | |
else{ | |
break; | |
} | |
bw.flush(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment