본문 바로가기

개발/알고리즘

[백준 / Python] 줄 세우기_2252

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

내 풀이

from _collections import deque
 
n, m = map(int, input().split())
data = [[] for _ in range(n + 1)]
indegree = [0 for _ in range(n + 1)]
for _ in range(m):
    a, b = map(int, input().split())
    data[a].append(b)
    indegree[b] += 1
 
 
def topology_sort():
    q = deque()
    for i in range(1, n + 1):
        if indegree[i] == 0:
            q.append(i)
    result = []
    while q:
        node = q.popleft()
        result.append(node)
 
        for i in data[node]:
            indegree[i] -= 1
            if indegree[i] == 0:
                q.append(i)
    for i in result:
        print(i, end=' ')
 
 
topology_sort()
 
 
cs

 

Why?

왜 두명의 키가 큰지 작은지만 알려줬는데, 위상정렬로 해결이 된걸까?

문제에서 주어지는 정보는 두 사람의 키만을 여러 번 비교해준다.

이 정보로 정확한 키 순서는 알 수 없지만, 두 사람을 비교했을 때 둘 중 하나는 비교한 다른 한 사람보다는 더 앞에 있거나 뒤에 있다는 것을 알 수 있다.

 

 

 

'개발 > 알고리즘' 카테고리의 다른 글

[백준 / Python] 음악프로그램_2623  (0) 2021.05.03
[백준 / Python] 게임 개발_1516  (0) 2021.05.02
[백준 / Python] 네트워크 연결_1922  (0) 2021.04.28
[백준 / Python] 파티_1238  (0) 2021.04.20
[BOJ] 좋은수열_2661  (0) 2021.04.08