코드
# 선수문제, 위상정렬로 하되 큐에 들어가는 값에 우선순위가 있다.
# 큐를 이용할 때 우선순위가 생기면 우선순위 큐를 사용한다.
# 여기서는 앞에 문제가 뒤에 문제보다 쉽기 때문에 우선순위 큐를 사용해준다.
import sys, heapq
input = sys.stdin.readline
n,m = map(int, input().split())
graph = [[] for _ in range(n+1)]
indegree = [0]*(n+1)
for _ in range(m):
x,y = map(int, input().split())
graph[x].append(y)
indegree[y] += 1
def topol_sort():
solve = []
queue = []
for i in range(1, n+1):
if indegree[i] == 0:
heapq.heappush(queue,i)
while queue:
popnum = heapq.heappop(queue)
solve.append(popnum)
for j in graph[popnum]:
indegree[j] -= 1
if indegree[j] == 0:
heapq.heappush(queue,j)
return solve
ps = topol_sort()
print(*ps)
우선순위 큐를 사용하지 않고 임의로 sort를 했다가 틀린 문제. 우선순위 큐가 있다는 사실을 망각하고 있었다. 이번을 계기로 기억해두자
'백준' 카테고리의 다른 글
[백준] 2056번 작업 파이썬 코드 (0) | 2024.01.05 |
---|---|
[백준] 2623번 음악프로그램 파이썬 코드 (0) | 2024.01.05 |
[백준] 2637번 장난감 조립 파이썬 코드 (0) | 2024.01.04 |
[백준] 14567번 선수과목 파이썬 코드 (0) | 2024.01.04 |
[백준] 2252번 줄 세우기 파이썬 코드 (0) | 2023.12.31 |
코드
# 선수문제, 위상정렬로 하되 큐에 들어가는 값에 우선순위가 있다.
# 큐를 이용할 때 우선순위가 생기면 우선순위 큐를 사용한다.
# 여기서는 앞에 문제가 뒤에 문제보다 쉽기 때문에 우선순위 큐를 사용해준다.
import sys, heapq
input = sys.stdin.readline
n,m = map(int, input().split())
graph = [[] for _ in range(n+1)]
indegree = [0]*(n+1)
for _ in range(m):
x,y = map(int, input().split())
graph[x].append(y)
indegree[y] += 1
def topol_sort():
solve = []
queue = []
for i in range(1, n+1):
if indegree[i] == 0:
heapq.heappush(queue,i)
while queue:
popnum = heapq.heappop(queue)
solve.append(popnum)
for j in graph[popnum]:
indegree[j] -= 1
if indegree[j] == 0:
heapq.heappush(queue,j)
return solve
ps = topol_sort()
print(*ps)
우선순위 큐를 사용하지 않고 임의로 sort를 했다가 틀린 문제. 우선순위 큐가 있다는 사실을 망각하고 있었다. 이번을 계기로 기억해두자
'백준' 카테고리의 다른 글
[백준] 2056번 작업 파이썬 코드 (0) | 2024.01.05 |
---|---|
[백준] 2623번 음악프로그램 파이썬 코드 (0) | 2024.01.05 |
[백준] 2637번 장난감 조립 파이썬 코드 (0) | 2024.01.04 |
[백준] 14567번 선수과목 파이썬 코드 (0) | 2024.01.04 |
[백준] 2252번 줄 세우기 파이썬 코드 (0) | 2023.12.31 |