Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- FDS
- Kubernetes
- 완전탐색
- autoencoder
- datascience
- 알고리즘
- FastAPI
- python
- github
- GCP
- pep8
- leetcode
- rnn
- Matplotlib
- Kaggle
- torchserve
- 프로그래머스
- NLP
- GIT
- 백준
- pytorch
- DeepLearning
- wandb
- NaverAItech
- 네이버AItech
- PytorchLightning
- GitHub Action
- docker
- 코딩테스트
- vscode
Archives
- Today
- Total
Sangmun
백준 1766번 문제집 본문
https://www.acmicpc.net/problem/1766
백준 2252번 줄 세우기 문제와 같이 기본적인 위상정렬 알고리즘을 연습해볼 수 있는 문제다.
백준 2252번 문제와 다른점은 2252번 문제는 가능한 정답 중에 하나만 출력해도 정답으로 인정이 되었지만 1766번 문제는 출력의 순서에 신경을 써야 한다는 점이다.
문제의 조건이 '가능한 낮은 난이도의 문제를 먼저 푸는것'임으로 위상 정렬상으로는 같은 순서여도 문제의 번호가 작은 수라면 먼저 출력을 해야 한다.
기본적인 위상 정렬 코드에서 q 부분을 heapq로 바꿔주면 바로 해결되는 문제다
# 기본적인 위상정렬 코드는 나동빈님의 '이것이 취업을 위한 코딩테스트다'를 참조함
import heapq
import sys
input = sys.stdin.readline
v,e = map(int,input().split())
indegree = [0] * (v+1)
graph = [[] for i in range(v+1)]
for _ in range(e):
a,b = map(int,input().split())
graph[a].append(b)
indegree[b] += 1
def topology_sort():
result = []
q = []
for i in range(1, v+1):
if indegree[i] == 0:
heapq.heappush(q,i)
while q:
now = heapq.heappop(q)
result.append(now)
for i in graph[now]:
indegree[i] -= 1
if indegree[i] == 0:
heapq.heappush(q,i)
for i in result:
print(i,end=' ')
topology_sort()
'알고리즘 > 백준' 카테고리의 다른 글
백준 11403번 경로찾기 (0) | 2022.10.01 |
---|---|
백준 14624번 - 전북대학교 (0) | 2022.09.28 |
백준 1774 우주신과의 교감 (0) | 2022.08.30 |
백준 13913번 숨바꼭질 4 (0) | 2022.08.30 |
백준 4386번 별자리 만들기 (0) | 2022.08.25 |
Comments