본문 바로가기
문제 풀이/백준(BOJ)

[Python] 백준 2252번 : 줄 세우기

by 희조당 2022. 8. 4.
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


💡 문제 풀이

위상 정렬 문제이다!

 

위상 정렬을 구현해주면 된다 ㅎㅎ

✔️ 느낀 점

💻 코드

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
graph = [[] for _ in range(N+1)]
indegree = [0] * (N + 1)

for _ in range(M):
    a, b = map(int, input().split())
    graph[a].append(b)
    indegree[b] += 1
    
q, ans = [], []

for i in range(1, N+1):
    if not indegree[i]: q.append(i)
    
while q:
    n = q.pop(0)
    ans.append(n)
    
    for i in graph[n]:
        indegree[i] -= 1
        
        if not indegree[i]: q.append(i)
        
for i in ans:
    print(i, end=' ')

댓글