14567. 선수과목
14567번: 선수과목 (Prerequisite)
3개의 과목이 있고, 2번 과목을 이수하기 위해서는 1번 과목을 이수해야 하고, 3번 과목을 이수하기 위해서는 2번 과목을 이수해야 한다.
www.acmicpc.net
- 대표적인 위상정렬 문제
- 전입차수 받아두기
- for문 돌려서 전입차수 0인것부터 큐에 삽입
- 다음값의 전입차수 -1 해가면서 0이면 큐에 삽입
- 내 풀이
# 앞선 과목 먼저 이수해야 해당과목 이수 가능
# a,b : a과목이 b의 선수과목 a->b
# 위상정렬
from collections import deque
def solve():
queue=deque()
for i in range(1,n+1):
if inlst[i]==0:
queue.append((i,1))
while queue:
x,cnt=queue.popleft()
result[x-1]=cnt
for gp in graph[x]:
#진입차수 하나씩 줄여주기
inlst[gp]-=1
if inlst[gp]==0:
queue.append((gp,cnt+1))
n,m=map(int,input().split())
#진입차수
inlst=[0 for _ in range(n+1)]
graph=[[] for _ in range(n+1)]
for _ in range(m):
a,b=map(int,input().split())
graph[a].append(b)
#진입차수 1 증가
inlst[b]+=1
result=[[0] for _ in range(n)]
solve()
print(*result)
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준][구현] 17276. 배열 돌리기 (0) | 2023.04.19 |
|---|---|
| [백준][구현] 1913. 달팽이 (0) | 2023.04.19 |
| [백준] [BFS] [위상정렬] 2056. 작업 (0) | 2023.04.18 |
| [백준] [BFS] 9019. DSLR (0) | 2023.04.15 |
| [백준][BFS] 9934. 완전 이진 트리 (0) | 2023.04.14 |