danbibibi
article thumbnail

문제

문제 바로가기> BOJ 2623번: 음악프로그램

2623번: 음악프로그램

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

www.acmicpc.net

 

풀이

보조 PD들이 정해 놓은 순서를 모두 만족 시키는 최종 순서를 찾아야 하기 때문에 위상정렬을 이용해서 문제를 풀었다!
주의 할 점은 이미 들어온 순서 쌍이 또 들어올 수 있다는 점이다. 이를 중복 처리 해주지 않기 위해 set을 이용했다!
 

#include <iostream>
#include <queue>
#include <set>
#define MAX 1001
using namespace std;

int N, M;
int inDegree[MAX];
set<int> list[MAX];

void input()
{
    cin >> N >> M;

    int singerNum, num;
    for (int i = 0; i < M; i++)
    {
        cin >> singerNum;
        int a, b;
        cin >> a;
        while (--singerNum)
        {
            cin >> b;
            if (list[a].find(b) == list[a].end())
                inDegree[b]++;
            list[a].insert(b);
            a = b;
        }
    }
}

void solution()
{
    queue<int> q, ans;
    for (int i = 1; i <= N; i++)
    {
        if (inDegree[i] == 0)
        {
            q.push(i);
            ans.push(i);
        }
    }

    while (!q.empty())
    {
        int n = q.front();
        q.pop();
        for (auto next : list[n])
        {
            if (--inDegree[next] == 0)
            {
                q.push(next);
                ans.push(next);
            }
        }
    }

    if (ans.size() != N)
        cout << 0;
    else
    {
        while (!ans.empty())
        {
            cout << ans.front() << "\n";
            ans.pop();
        }
    }
}

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

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 23309번: 철도 공사  (0) 2023.03.22
BOJ 12852번: 1로 만들기 2  (0) 2023.03.21
BOJ 1584번: 게임  (0) 2023.03.18
BOJ 2636번: 치즈  (0) 2023.03.18
BOJ 2842번 : 집배원 한상덕  (0) 2023.03.10
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로