Coding Test/BaekJoon_C++

백준 2252 <줄 세우기> C++

JunOnJuly 2024. 3. 25. 18:37
728x90

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

 

2252번: 줄 세우기

첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의

www.acmicpc.net


 

 

백준 2252 <줄 세우기> Python

https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다

dev-diary-0717.tistory.com

 

파이썬으로 풀었던 문제를 C++ 로 재구성 했습니다.


#include <iostream>
#include <array>
#include <vector>
#include <deque>
#include <algorithm>

using namespace std;

int main(void) {
    // 입력
    int N, M;
    cin >> N >> M;

    // 자신의 자식 노드들을 기록
    array<vector<int>, 32001> children_arr;
    // 자신에게 들어오는 노드들의 수를 기록
    array<int, 32001> topol_arr{};
    // 입력
    for (int i = 0; i < M; i++) {
        int parent, child;
        cin >> parent >> child;

        children_arr[parent].push_back(child);
        topol_arr[child] += 1;
    }

    // 줄
    vector<int> line;
    // 방문 목록
    array<bool, 32001> visited;
    visited.fill(true);
    // 순회
    while (line.size() != N) {
        // 줄을 세울 목록 큐
        deque<int> line_dq;

        for (int i = 1; i < N+1; i++) {
            // 방문한적 없고 들어오는 노드가 없는 노드
            if (visited[i] and topol_arr[i] == 0) {
                // 목록 작성
                line_dq.push_back(i);
                // 방문기록
                visited[i] = false;
            }
        }

        // 실제로 줄 세우기
        for (auto num : line_dq) {
            line.push_back(num);
            // 줄 세운 노드가 들어가는 노드
            for (auto child : children_arr[num]) {
                // 들어가는 수 -1
                topol_arr[child] -= 1;
            }
        }
    }

    for (auto num : line) {
        cout << num << " ";
    }
}

 

728x90

'Coding Test > BaekJoon_C++' 카테고리의 다른 글

백준 1451 <직사각형으로 나누기> C++  (2) 2024.03.27
백준 11758 <CCW> C++  (0) 2024.03.26
백준 1717 <집합의 표현> C++  (1) 2024.03.15
백준 11657 <타임머신> C++  (0) 2024.03.14
백준 9935 <문자열 폭발> C++  (0) 2024.03.13