용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (248)
    • 개발 (75)
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (19)
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

(C++) 백준 2252번 - 줄 세우기
알고리즘/알고리즘 문제 풀이

(C++) 백준 2252번 - 줄 세우기

2023. 6. 19. 03:39

문제 링크 : 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

풀이

indegree라는 자신에게 들어오는 간선의 수를 저장하는 배열을 사용하여, indegree가 0인 경우에만 큐에 넣어 출력하는 방식으로 풀이하였다.

indegree가 0이 아닌 경우에는 연결된 정점을 방문할 때마다 indegree를 1씩 줄여나가며, 0이 되는 순간 큐에 들어가도록 한다.

#include <iostream>
#include <queue>

using namespace std;

vector<int> students[32005];
int indegree[32005];
queue<int> q;
int n, m, fs, ss;

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

    cin >> n >> m;
    while(m--)
    {
        cin >> fs >> ss;
        students[fs].push_back(ss);
        indegree[ss]++;
    }
    for(int i = 1; i <= n; i++){
        if(!indegree[i]) q.push(i);
    }
    while(!q.empty()){
        int v = q.front();
        cout << v << " ";
        q.pop();
        for(auto k : students[v]){
            indegree[k]--;
            if(!indegree[k]) q.push(k);
        }
    }
}

'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글

(C++) 백준 1368번 - 물대기  (0) 2023.06.19
(C++) 백준 1197번 - 최소 스패닝 트리  (0) 2023.06.19
(C++) 백준 1260번 - DFS와 BFS  (1) 2023.06.19
(C++) 백준 11724번 - 연결 요소의 개수  (0) 2023.06.18
(C++) 백준 1715번 - 카드 정렬하기  (0) 2023.06.17
    '알고리즘/알고리즘 문제 풀이' 카테고리의 다른 글
    • (C++) 백준 1368번 - 물대기
    • (C++) 백준 1197번 - 최소 스패닝 트리
    • (C++) 백준 1260번 - DFS와 BFS
    • (C++) 백준 11724번 - 연결 요소의 개수
    용꿀
    용꿀

    티스토리툴바