Skip to content

Commit 7a76ed3

Browse files
committed
[Gold III] Title: 음악프로그램, Time: 12 ms, Memory: 79516 KB -BaekjoonHub
1 parent ae30bc4 commit 7a76ed3

2 files changed

Lines changed: 97 additions & 0 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# [Gold III] 음악프로그램 - 2623
2+
3+
[문제 링크](https://www.acmicpc.net/problem/2623)
4+
5+
### 성능 요약
6+
7+
메모리: 79516 KB, 시간: 12 ms
8+
9+
### 분류
10+
11+
그래프 이론, 방향 비순환 그래프, 위상 정렬
12+
13+
### 제출 일자
14+
15+
2026년 2월 22일 15:53:51
16+
17+
### 문제 설명
18+
19+
<p>인터넷 방송 KOI(Korea Open Internet)의 음악 프로그램 PD인 남일이는 자기가 맡은 프로그램 '뮤직 KOI'에서 가수의 출연 순서를 정하는 일을 매우 골치 아파한다. 순서를 정하기 위해서는 많은 조건을 따져야 한다.</p>
20+
21+
<p>그래서 오늘 출연 예정인 여섯 팀의 가수에 대해서 남일이가 보조 PD 세 명에게 각자 담당한 가수의 출연 순서를 정해오게 하였다. 보조 PD들이 가져온 것은 아래와 같다.</p>
22+
23+
<ul>
24+
<li>1 4 3</li>
25+
<li>6 2 5 4</li>
26+
<li>2 3</li>
27+
</ul>
28+
29+
<p>첫 번째 보조 PD는 1번 가수가 먼저, 다음에 4번 가수, 다음에 3번 가수가 출연하기로 순서를 정했다. 두 번째 보조 PD는 6번, 2번, 5번, 4번 순으로 자기 담당 가수들의 순서를 정했다. 한 가수를 여러 보조 PD가 담당할 수도 있다. 마지막으로, 세 번째 보조 PD는 2번 먼저, 다음에 3번으로 정했다.</p>
30+
31+
<p>남일이가 할 일은 이 순서들을 모아서 전체 가수의 순서를 정하는 것이다. 남일이는 잠시 생각을 하더니 6 2 1 5 4 3으로 순서를 정했다. 이렇게 가수 순서를 정하면 세 보조 PD가 정해온 순서를 모두 만족한다. 물론, 1 6 2 5 4 3으로 전체 순서를 정해도 괜찮다.</p>
32+
33+
<p>경우에 따라서 남일이가 모두를 만족하는 순서를 정하는 것이 불가능할 수도 있다. 예를 들어, 세 번째 보조 PD가 순서를 2 3 대신에 3 2로 정해오면 남일이가 전체 순서를 정하는 것이 불가능하다. 이번에 남일이는 우리 나라의 월드컵 4강 진출 기념 음악제의 PD를 맡게 되었는데, 출연 가수가 아주 많다. 이제 여러분이 해야 할 일은 보조 PD들이 가져 온 순서들을 보고 남일이가 가수 출연 순서를 정할 수 있도록 도와 주는 일이다.</p>
34+
35+
<p>보조 PD들이 만든 순서들이 입력으로 주어질 때, 전체 가수의 순서를 정하는 프로그램을 작성하시오.</p>
36+
37+
### 입력
38+
39+
<p>첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한 가수의 수가 나오고, 그 뒤로는 그 가수들의 순서가 나온다. N은 1이상 1,000이하의 정수이고, M은 1이상 100이하의 정수이다.</p>
40+
41+
### 출력
42+
43+
<p>출력은 N 개의 줄로 이뤄지며, 한 줄에 하나의 번호를 출력한 다. 이들은 남일이가 정한 가수들의 출연 순서를 나타낸다. 답이 여럿일 경우에는 아무거나 하나를 출력 한다. 만약 남일이가 순서를 정하는 것이 불가능할 경우에는 첫째 줄에 0을 출력한다.</p>
44+
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import Foundation
2+
3+
let first = readLine()!.split(separator: " ").map { Int($0)! },
4+
N = first[0],
5+
M = first[1]
6+
7+
var graph = Array(repeating: [Int](), count: N + 1)
8+
var indegree = Array(repeating: 0, count: N + 1)
9+
10+
for _ in 0..<M {
11+
let input = readLine()!.split(separator: " ").map { Int($0)! }
12+
let count = input[0]
13+
14+
if count > 1 {
15+
for i in 1..<count {
16+
let from = input[i]
17+
let to = input[i + 1]
18+
graph[from].append(to)
19+
indegree[to] += 1
20+
}
21+
}
22+
}
23+
24+
var queue = [Int]()
25+
for i in 1...N {
26+
if indegree[i] == 0 {
27+
queue.append(i)
28+
}
29+
}
30+
31+
var result = [Int]()
32+
var index = 0
33+
34+
while index < queue.count {
35+
let current = queue[index]
36+
index += 1
37+
result.append(current)
38+
39+
for next in graph[current] {
40+
indegree[next] -= 1
41+
if indegree[next] == 0 {
42+
queue.append(next)
43+
}
44+
}
45+
}
46+
47+
if result.count != N {
48+
print(0)
49+
} else {
50+
for r in result {
51+
print(r)
52+
}
53+
}

0 commit comments

Comments
 (0)