스쳐가는비
devtravel
스쳐가는비
전체 방문자
오늘
어제
  • 분류 전체보기 (108)
    • 🎵 Daily (0)
    • 📚 Computer Science (11)
      • Algorithm (9)
      • Design Pattern (2)
    • 🔥 Programming (23)
      • C# (3)
      • C++ (5)
      • WPF (0)
      • Python (1)
      • OpenCV (9)
      • ML & DL (5)
    • 🔥 Web (13)
      • HTML (6)
      • JavaScript (7)
    • 📌 Tool (2)
      • Git (2)
      • Etc (0)
    • 📖 Certificate (10)
      • 컴활 1급 (2)
      • SQL 개발자 (2)
      • 리눅스 마스터 (0)
      • 정보처리기사 (0)
      • 사무자동화산업기사 (0)
      • ADsP (6)
    • 💻 OnlineJudge (49)
      • Baekjoon (49)
      • GoormEdu (0)
GitHub Contribution
Loading data ...

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
스쳐가는비

devtravel

[백준 / BOJ] C++ 1766 문제집
💻 OnlineJudge/Baekjoon

[백준 / BOJ] C++ 1766 문제집

2022. 10. 6. 19:23

https://www.acmicpc.net/problem/1766

1766번: 문제집

첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주

www.acmicpc.net

풀이

위상 정렬이라는 개념도 제대로 모르고있었던 위상정렬 문제이다...
그래서 공부하며 포스팅하고 문제를 다시 풀어보았다.

입력란에 첫줄은 문제의 갯수와 조건의 갯수를 나타내고,
두번째줄 세번째줄을 보면 먼저 풀어야하는 문제 조건을 나타낸다.
=> (4 - 2), (3 - 1)

degree 배열에 해당 번호에 들어오는 선의 수를 저장하고
2차원 벡터에 간선의 방향을 정해준다. (4 -> 2, 3 -> 1)

난이도 순으로 풀어야 하기에 우선순위 큐를 오름차순으로 정렬 후, 해당 원소에 들어오지 않는 번호들을 push 해준다.
이후 큐에 들어있는 top을 차례대로 출력해주고, pop 하면서 해당 큐의 top이 가리키는 번호가 있으면 다시 큐에 push 해준다.

Code ( C++ )

#include <iostream>
#include<queue>
#include<vector>
using namespace std;

int main() 
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int degree[32000] = { 0 };
    vector<int> vt[32000];
    priority_queue<int, vector<int>, greater<int>> pq;
    int n, m;
    cin >> n >> m;

    for (int i = 1; i <= m; i++) {
        int a, b;
        cin >> a >> b;
        degree[b]++;
        vt[a].push_back(b);
    }

    for (int i = 1; i <= n; i++) {

        if (degree[i] == 0) {
            pq.push(i);
        }

    }
    while (!pq.empty()) 
    {
        int qNum = pq.top();
        pq.pop();
        cout << qNum << ' ';

        for (int i = 0; i < vt[qNum].size(); i++) {

            int next = vt[qNum][i];

            if (--degree[next] == 0) {
                pq.push(next);
            }
        }
    }
}

'💻 OnlineJudge > Baekjoon' 카테고리의 다른 글

[백준 / BOJ] C++ 7662 이중 우선순위 큐  (0) 2022.10.12
[백준 / BOJ] C++ 1715 카드 정렬  (0) 2022.10.06
[백준 / BOJ] C++ 1655 가운데를 말해요  (0) 2022.09.26
[백준 / BOJ] C++ 11286 절대값 힙  (1) 2022.09.26
[백준 / BOJ] C++ 1927 최소 힙  (1) 2022.09.26
    '💻 OnlineJudge/Baekjoon' 카테고리의 다른 글
    • [백준 / BOJ] C++ 7662 이중 우선순위 큐
    • [백준 / BOJ] C++ 1715 카드 정렬
    • [백준 / BOJ] C++ 1655 가운데를 말해요
    • [백준 / BOJ] C++ 11286 절대값 힙
    스쳐가는비
    스쳐가는비
    The biggest risk is not taking any risk

    티스토리툴바