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 |