728x90
반응형
https://www.acmicpc.net/problem/2252
2252번: 줄 세우기
첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의
www.acmicpc.net
풀이
다음 문제는 위상 정렬을 사용하면 쉽게 해결할 수 있다.
이유는 각 비교 학생들을 앞에 서야 하는 학생 쪽으로 화살표를 그리면 진입 차수와 진출 차수를 알 수 있다.
그래서 진입 차수가 0이면 앞에 서야하는 학생이 없는 뜻이기 때문에 deque를 이용하여 진입차수가 0인 학생들을 result에 저장 후 출력했다. 이 때 각 학생의 진입 차수 즉 앞에 서야하는 학생의 수를 check에 카운트했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
from collections import deque
n,m=map(int,input().split())
check=[0]*(n+1)
graph=[[] for _ in range(n+1)]
for _ in range(m):
x,y=map(int, input().split())
graph[x].append(y)
check[y]+=1
result=[]
deq=deque()
for i in range(1,n+1):
if check[i]==0:
deq.append(i)
while deq:
a=deq.popleft()
result.append(a)
for i in graph[a]:
check[i]-=1
if check[i]==0:
deq.append(i)
for i in result:
print(i,end=" ")
|
cs |
728x90
반응형
'Python3 > 백준 알고리즘' 카테고리의 다른 글
2022.02.17 [백준] (python 파이썬) 게임 개발 (0) | 2022.02.17 |
---|---|
2022.02.17 [백준] (python 파이썬) ACM Craft (0) | 2022.02.17 |
2022.02.16 [백준] (python 파이썬) 문제집 (0) | 2022.02.16 |
2022.02.16 [백준] (python 파이썬) 카드 정렬하기 (0) | 2022.02.16 |
2022.02.16 [백준] (python 파이썬) Yonsei TOTO (0) | 2022.02.16 |
댓글