알고리즘/백준

백준 1766: 문제집 (Python)

sssbin 2022. 8. 5. 23:11

 

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

 

1766번: 문제집

첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주

www.acmicpc.net

 

위상정렬을 이용해서 풀면 되는데

'먼저 푸는 것이 좋은 문제' 대한 정보를 간선으로 저장하고

가능하면 쉬운 문제를 먼저 풀어야 하는데 난이도는 1~n 차례대로 되어 있으니

큐를 오름차순으로 정렬해서 쓰면 된다. -> 우선순위 사용함

 

# 우선순위큐
from queue import PriorityQueue

# 생성
q = PriorityQueue()
q = PriorityQueue(maxsize = 8)  # 최대 크기 8

# 원소 추가
q.put(1)
# 원소 삭제
q.get()

# 큐의 사이즈를 반환
q.qsize()
# 큐가 비어있으면 True, 비어있지 않으면 False 반환
q.empty()
# 큐가 가득 차있으면 True, 그렇지 않으면 False 반환
q.full()

 

from queue import PriorityQueue
import sys
input = sys.stdin.readline

n, m = map(int, input().split())

info = [[] for _ in range(n+1)]
indegree = [0] * (n+1)

for _ in range(m):
    a, b = map(int, input().split())
    info[a].append(b)
    indegree[b] += 1

q = PriorityQueue()
res = []

for i in range(1, n+1):
    if indegree[i] == 0:
        q.put(i)

while q.empty() is False:
    now = q.get()
    res.append(now)
    for i in info[now]:
        indegree[i] -= 1
        if indegree[i] == 0:
            q.put(i)

for i in res:
    print(i, end=' ')

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 16918: 봄버맨 (Python)  (0) 2023.05.02
백준 12933: 오리 (Python)  (0) 2023.04.14
백준 2252: 줄 세우기 (Python)  (0) 2022.08.05
백준 2887: 행성 터널 (Python)  (0) 2022.08.04
백준 1774: 우주신과의 교감 (Python)  (0) 2022.08.04