Skip to content

Commit

Permalink
[Gold III] Title: 음악프로그램, Time: 0 ms, Memory: 2300 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
belowyoon committed Apr 29, 2024
1 parent bbac0be commit 644d044
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 0 deletions.
44 changes: 44 additions & 0 deletions 백준/Gold/2623. 음악프로그램/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# [Gold III] 음악프로그램 - 2623

[문제 링크](https://www.acmicpc.net/problem/2623)

### 성능 요약

메모리: 2300 KB, 시간: 0 ms

### 분류

방향 비순환 그래프, 그래프 이론, 위상 정렬

### 제출 일자

2024년 4월 30일 03:40:02

### 문제 설명

<p>인터넷 방송 KOI(Korea Open Internet)의 음악 프로그램 PD인 남일이는 자기가 맡은 프로그램 '뮤직 KOI'에서 가수의 출연 순서를 정하는 일을 매우 골치 아파한다. 순서를 정하기 위해서는 많은 조건을 따져야 한다.</p>

<p>그래서 오늘 출연 예정인 여섯 팀의 가수에 대해서 남일이가 보조 PD 세 명에게 각자 담당한 가수의 출연 순서를 정해오게 하였다. 보조 PD들이 가져온 것은 아래와 같다.</p>

<ul>
<li>1 4 3</li>
<li>6 2 5 4</li>
<li>2 3</li>
</ul>

<p>첫 번째 보조 PD는 1번 가수가 먼저, 다음에 4번 가수, 다음에 3번 가수가 출연하기로 순서를 정했다. 두 번째 보조 PD는 6번, 2번, 5번, 4번 순으로 자기 담당 가수들의 순서를 정했다. 한 가수를 여러 보조 PD가 담당할 수도 있다. 마지막으로, 세 번째 보조 PD는 2번 먼저, 다음에 3번으로 정했다.</p>

<p>남일이가 할 일은 이 순서들을 모아서 전체 가수의 순서를 정하는 것이다. 남일이는 잠시 생각을 하더니 6 2 1 5 4 3으로 순서를 정했다. 이렇게 가수 순서를 정하면 세 보조 PD가 정해온 순서를 모두 만족한다. 물론, 1 6 2 5 4 3으로 전체 순서를 정해도 괜찮다.</p>

<p>경우에 따라서 남일이가 모두를 만족하는 순서를 정하는 것이 불가능할 수도 있다. 예를 들어, 세 번째 보조 PD가 순서를 2 3 대신에 3 2로 정해오면 남일이가 전체 순서를 정하는 것이 불가능하다. 이번에 남일이는 우리 나라의 월드컵 4강 진출 기념 음악제의 PD를 맡게 되었는데, 출연 가수가 아주 많다. 이제 여러분이 해야 할 일은 보조 PD들이 가져 온 순서들을 보고 남일이가 가수 출연 순서를 정할 수 있도록 도와 주는 일이다.</p>

<p>보조 PD들이 만든 순서들이 입력으로 주어질 때, 전체 가수의 순서를 정하는 프로그램을 작성하시오.</p>

### 입력

<p>첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한 가수의 수가 나오고, 그 뒤로는 그 가수들의 순서가 나온다. N은 1이상 1,000이하의 정수이고, M은 1이상 100이하의 정수이다.</p>

### 출력

<p>출력은 N 개의 줄로 이뤄지며, 한 줄에 하나의 번호를 출력한 다. 이들은 남일이가 정한 가수들의 출연 순서를 나타낸다. 답이 여럿일 경우에는 아무거나 하나를 출력 한다. 만약 남일이가 순서를 정하는 것이 불가능할 경우에는 첫째 줄에 0을 출력한다.</p>

57 changes: 57 additions & 0 deletions 백준/Gold/2623. 음악프로그램/음악프로그램.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);

int n, m;
cin >> n >> m;
vector<vector<int>> map(n+1, vector<int>());
vector<int> degree(n+1, 0);

int size;
for (int i = 0; i < m; i++) {
cin >> size;
vector<int> tmp(size, 0);
for (int j = 0; j < size; j++) {
cin >> tmp[j];
}
for (int j = 0; j < size; j++) {
for (int k = j+1; k < size; k++) {
map[tmp[j]].push_back(tmp[k]);
degree[tmp[k]]++;
}
}
}

queue<int> q;
for (int i = 1; i <= n; i++) {
if (degree[i] == 0) q.push(i);
}
vector<int> ans;
while(!q.empty()) {
int x = q.front();
q.pop();
ans.push_back(x);
for (int i = 0; i < map[x].size(); i++) {
int nx = map[x][i];
degree[nx]--;
if (degree[nx] == 0) q.push(nx);
}
}

if (ans.size() != n) {
cout << "0";
} else {
for (int i = 0; i < n; i++) {
cout << ans[i] << '\n';
}
}

return 0;
}

0 comments on commit 644d044

Please sign in to comment.