Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[BAEKJOON] 2623. 음악프로그램 본문

acmicpc

[BAEKJOON] 2623. 음악프로그램

코드와이 2021. 4. 23. 14:18

 

위상정렬

문제링크

www.acmicpc.net/problem/2623

 

2623번: 음악프로그램

첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한

www.acmicpc.net

 

package acmicpc.Gold2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;

public class 음악_프로그램 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuilder sb = new StringBuilder();
		
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		List<List<Integer>> list = new ArrayList<List<Integer>>();
		int[] arr = new int[n+1];
		for(int i = 0 ; i <= n ; i++) {
			list.add(new ArrayList<Integer>());
		}
		
		for(int i = 0 ; i < m ; i++) {
			st = new StringTokenizer(br.readLine());
			int k = Integer.parseInt(st.nextToken());
			List<Integer> tmp = new ArrayList<Integer>();
			for(int j = 0 ; j < k ; j++) {
				tmp.add(Integer.parseInt(st.nextToken()));
			}
			
			for(int j = 0 ; j < tmp.size() ; j++) {
				for(k = j + 1 ; k < tmp.size() ; k++) {
					list.get(tmp.get(j)).add(tmp.get(k));
					arr[tmp.get(k)]++;
				}
			}
		}
		
		Queue<Integer> queue = new LinkedList<Integer>();
		for(int i = 1 ; i <= n ; i++) {
			if(arr[i] == 0) queue.offer(i);
		}
		
		while(!queue.isEmpty()) {
			int q = queue.poll();
			sb.append(q).append("\n");
			for(int l : list.get(q)) {
				if(--arr[l] == 0) {
					queue.add(l);
				}
			}
		}
		sb.setLength(sb.length() - 1);
		for(int i = 1 ; i <= n ; i++) {
			if(arr[i] != 0) {
				sb.setLength(0);
				sb.append(0);
			}
		}
		System.out.println(sb);
	}
}

'acmicpc' 카테고리의 다른 글

[BAEKJOON] 2293. 동전1  (0) 2021.04.24
[BAEKJOON] 1904. 01타일  (0) 2021.04.24
[BAEKJOON] 11403. 경로 찾기  (0) 2021.04.22
[BAEKJOON] 11404. 플로이드  (0) 2021.04.22
[BAEKJOON] 15683. 감시  (0) 2021.04.21