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
- 문제해결 단계
- l-value참조자
- 주기억장치
- IPv4 주소체계
- 값/참조/주소에 의한 전달
- 운영체제 기능
- LAN의 분류
- 범위 기반 for문
- 괄호 검사 프로그램
- c언어 괄호검사
- 백준 파이썬
- C언어 덱
- 입출력 관리자
- 프로그래머스 배열만들기4
- r-value참조자
- 프로그래머스 푸드 파이트 대회
- 원형 연결 구조 연결된 큐
- C언어 계산기 프로그램
- C언어 스택 연산
- 유형 변환
- auto 키워드
- 알고리즘 조건
- string유형
- 문자형 배열
- 네트워크 결합
- getline()함수
- const l-value참조자
- 논리 연산
- 회전 및 자리 이동 연산
- const화
Archives
- Today
- Total
chyam
[백준] 2252번, python - 줄 세우기 (위상 정렬) 본문

위상정렬에 관한 개념을 정확히 알지 못해서 문제를 푸는 데 어려움이 있었다.
위상정렬이란 방향 그래프에서 모든 간선 방향을 지키면서 노드를 나열하는 것을 의미한다.
단, 사이클이 없는 그래프에서만 가능하다!!
대표적인 알고리즘은 다음과 같다.
1. 모든 노드의 진입차수를 계산한다
2. 진입 차수가 0인 노드들을 큐에 추가한다
3. 큐에서 노드를 하나 꺼내서 해당 노드와 연결된 간선을 제거한다
4. 간선을 제거하여 진입 차수가 0이되면 다시 큐에 추가한다
5. 큐가 빌 때까지 반복한다.
여기서 진입 차수가 0이라는 것은 해당 노드보다 앞에 와야 할 노드가 없다는 뜻이다.
from collections import deque
n, m = map(int,input().split())
graph = [[] for _ in range(n+1)]
indegree = [0]*(n+1) # 진입 차수
for _ in range(m):
a, b = map(int,input().split())
graph[a].append(b)
indegree[b] += 1
queue = deque()
res = []
# 진입 차수 0인 노드부터 시작
for i in range(1, n+1):
if indegree[i] == 0:
queue.append(i)
while queue:
now = queue.popleft()
res.append(now)
for next_node in graph[now]:
indegree[next_node] -= 1 # 간선 제거
if indegree[next_node] == 0: # 진입 차수가 0이되면 다시 큐에 추가
queue.append(next_node)
print(*res)'백준' 카테고리의 다른 글
| [백준] 1759번, python - 암호 만들기 (1) | 2026.03.05 |
|---|---|
| [백준] 1005번,python - ACM Craft (0) | 2026.03.04 |
| [백준] 2294번,python - 동전 2 (0) | 2026.02.11 |
| [백준] 1922번, python - 네트워크 연결(Union-Find) (0) | 2026.01.26 |
| [백준] 10986번, python - 나머지 합 (0) | 2026.01.25 |
