2252번 줄 세우기 | 뭐라도 하겠지

2252번 줄 세우기

이왜틀?


img01

2252번 줄 세우기 - 백준

런타임 에러가 났고 코드가 너무 길어서 안가져오기로 했다.
대충 리스트에 넣고 빼면서 시뮬레이션 하는 내용이다.

설계


위상정렬을 한다.

구현


대충 그래프 그리고, 진입차수가 0인 노드를 큐에 모으고, 연결된 노드 진입차수 감소시킨다.

from collections import deque

N, M = map(int, input().split())

# 그래프, 간선, 진입차수, 큐
graph = [[] for _ in range(N + 1)]
edges = [tuple(map(int, input().split())) for _ in range(M)]
degree = [0] * (N + 1)
que = deque()
result = []

for A, B in edges:
    graph[A].append(B)
    degree[B] += 1

# 진입차수 0
for i in range(1, N + 1):
    if degree[i] == 0:
        que.append(i)

while que:
    now = que.popleft()
    result.append(now)

    # 연결된 노드 진입차수 감소
    for node in graph[now]:
        degree[node] -= 1
        if degree[node] == 0:
            que.append(node)

print(" ".join(map(str, result)))

채점


img02

반성


뭐지 위상정렬 왜 재밌지?
그래프 그리는 것 부터 짜증나야하는데
파이썬 코드가 예뻐서 그런 것 같다.

코드 확인


Link to GitHub

Updated: