Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- sql
- db
- 자바스크립트
- eclipse
- flask
- Git
- javascript
- 에러
- mysql
- rdbms
- 파이썬
- 백준
- 이클립스
- Oracle
- spring
- database
- BOJ
- 데이터베이스
- java
- 오라클
- 알고리즘
- 스프링
- jQuery
- PYTHON
- 웹프로그래밍
- TIL
- mybatis
- 자바
- 링크
- 플라스크
Archives
- Today
- Total
기록과 정리의 공간
[알고리즘] 백준 1766번 : 문제집 본문
백준 1766번 : 문제집 (문제 링크)
- 사용 언어 : 파이썬(Python)
- 문제 유형 : 힙, 위상정렬
- 난이도 : 중
소스코드
import sys, heapq
n, m = map(int, sys.stdin.readline().split())
array = [[] for i in range(n+1)]
indegree = [0] * (n+1)
heap = []
result = []
for _ in range(m):
a, b = map(int, sys.stdin.readline().split())
array[a].append(b)
indegree[b] += 1
for i in range(1, n+1):
if indegree[i] == 0:
heapq.heappush(heap, i)
while heap:
node = heapq.heappop(heap)
result.append(node)
if array[node]:
for i in array[node]:
indegree[i] -= 1
if indegree[i] == 0:
heapq.heappush(heap, i)
for i in result:
print(i, end=' ')
설명
- 위상 정렬 알고리즘이란? : (링크)
- 이 문제는 전형적인 위상 정렬 알고리즘 문제이다.
- 문제의 3번 조건, 가능하면 쉬운 문제(즉, 번호가 작은)부터 풀어야 한다는 조건을 만족시키기 위해서는 일반 큐가 아닌 최소힙을 이용해야한다.
- 이 문제는 위상 정렬 + 최소힙을 이용해 해결할 수 있다.
'문제풀이 > 백준(BOJ)' 카테고리의 다른 글
[알고리즘] 백준 12865번 : 평범한 배낭 (0) | 2020.08.06 |
---|---|
[알고리즘] 백준 1904번 : 01타일 (0) | 2020.08.05 |
[알고리즘] 백준 1991번 : 트리 순회 (0) | 2020.07.17 |
[알고리즘] 백준 2212번 : 센서 (4) | 2020.07.17 |
[알고리즘] 백준 4195번 : 친구 네트워크 (0) | 2020.07.17 |
Comments