[PY] <!> 1432 : 그래프 수정

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

문제 독해력부터 안된 김에 그냥 블로그부터 보았다.
핵심은 indegree 를 쫓는 형식의 위상 정렬을 반대로 outdegree로 구현하고, 또 제시하는 의도에 맞게 데이터 출력을 해야한다.

이 문제가 원하는게 뭔지부터 알기가 실패했기 때문에 이건 반드시 다시 풀어야한다. outdegree를 사용해야 답이 보장되는 이유도 알아야겠고.

https://codable.tistory.com/13

 

[Python] 백준 1432번 그래프 수정

이번에 풀 문제는 그래프 수정 문제이다. 위상 정렬을 활용하는 문제인데, 일단 문제를 보고 가자. - N개의 정점으로 구성된 그래프가 입력으로 주어진다. 이때 노드의 번호는 1보다 크거나 같고

codable.tistory.com

import sys, heapq
input = sys.stdin.readline

nodeCnt = int(input())

graph = [[] for _ in range(nodeCnt + 1)]
tmp = []

for _ in range(nodeCnt):
    tmp.append(input().rstrip())

outdegree = [0] * (nodeCnt + 1)
change = [0] * (nodeCnt + 1)

heap = []

for i in range(nodeCnt):
    for j in range(nodeCnt):
        if tmp[i][j] == '1':
            graph[j + 1].append(i + 1)
            outdegree[i + 1] += 1
    if outdegree[i + 1] == 0:
        heapq.heappush(heap, -(i + 1))

num = nodeCnt
while heap:
    now = -heapq.heappop(heap)
    change[now] = num
    num -= 1

    for next_node in graph[now]:
        outdegree[next_node] -= 1
        if outdegree[next_node] == 0:
            heapq.heappush(heap, -next_node)

print(*change[1:]) if not 0 in change[1:] else print(-1)

 

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

[PY] 2665 : 미로만들기  (0) 2025.04.02
[PY] 3055 : 탈출  (0) 2025.04.02
[PY] 2294 : 동전 2  (1) 2025.04.01
[PY] 18352 : 특정 거리의 도시 찾기  (0) 2025.04.01
[PY] 14888 : 연산자 끼워넣기  (0) 2025.04.01