티스토리 뷰
반응형
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
⊙ 문제
⊙ 입력
⊙ 출력
⊙ 예제 입출력
⊙ 알고리즘 분류
- 그래프 이론
- 위상 정렬
⊙ 문제 접근 과정
위상 정렬 알고리즘 문제다.
위상 정렬 알고리즘은 큐를 이용하여 풀 수 있다.
큐를 이용하여 위상 정렬 알고리즘을 푸는 과정은
1️⃣ 진입 차수가 0인 모든 노드를 큐에 넣는다.
2️⃣ 큐가 빌 때까지 while문을 돌린다!!
3️⃣ 반복문에서는 큐에서 원소를 꺼내 해당 노드에서 나가는 간선을 그래프에서 제거
4️⃣ 새롭게 진입 차수가 0이 된 노드를 큐에 추가
위상 정렬에서는 여러 가지 답이 존재할 수도 있다.
스택을 활용하여 풀어주자
⊙ 문제 풀이
import sys
from collections import deque
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 topo():
result = []
q = deque()
for i in range(1,N+1):
if indegree[i]==0:
q.append(i)
while q:
a = q.popleft()
result.append(a)
for i in graph[a]:
indegree[i]-=1
if indegree[i]==0:
q.append(i)
for i in result:
print(i,end=' ')
topo()
⊙ 결과
⊙ 마무리
NONE
좋아요는 로그인하지 않아도 누를 수 있습니다!
728x90
반응형
'백준 온라인 저지 [BOJ] > PYTHON [파이썬]' 카테고리의 다른 글
[백준(BOJ)] 14502번 : 연구소 - PYTHON[파이썬] (2) | 2021.10.02 |
---|---|
[백준(BOJ)] 1766번 : 문제집 - PYTHON[파이썬] (0) | 2021.09.29 |
[백준(BOJ)] 1987번 : 알파벳 - PYTHON[파이썬] (0) | 2021.09.27 |
[백준(BOJ)] 2812번 : 크게 만들기 - PYTHON[파이썬] (0) | 2021.09.27 |
[백준(BOJ)] 5397번 : 키로거 - PYTHON[파이썬] (0) | 2021.09.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘
- 정리
- 프로그래머스
- 풀이
- 쉽게배우는
- CPP
- 백준
- Python
- py
- OS
- 파이썬
- 연습문제
- 정렬
- 답
- JS
- 운영체제
- 우종정
- 쉽게배우는자바프로그래밍
- Web
- 구현
- 해답
- 그리디
- 자바
- BFS
- 자바스크립트
- C++
- 정답
- 문자열
- java
- 쉽게 배우는 자바 프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 |
30 | 31 |
글 보관함