백준 2252 줄 세우기

gmlwlswldbs·2021년 11월 2일
0

코딩테스트

목록 보기
73/130
from collections import deque

n, m = map(int, input().split())
line = [[] for _ in range(n+1)]
g = [0] * (n+1)
ans = []
q = deque()

for i in range(m):
    a, b = map(int, input().split())
    line[a].append(b)
    g[b] += 1

# 작은 것들(0값을 가진 인덱스) 큐에 넣음 -> 작은 것부터 ans에 넣음
for i in range(1, n+1):
    if g[i] == 0:
        q.append(i)

while q:
	# 연결그래프의 간선이 0인 것들
    x = q.popleft()
    ans.append(x)
	# x를 pop 해줬기 때문에 연결된 것들 수 바꿔줌. q 업데이트
    for j in line[x]:
        g[j] -= 1
        if g[j] == 0:
            q.append(j)

for i in ans:
    print(i, end=' ')

여러가지 그래프를 씀
line : 대소관계를 따져서 넣음
g : index보다 작은 것의 갯수 넣음
q : 작은 것부터 따질 때 쓰려고 큐

0개의 댓글