일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BFS
- 파이썬
- 구글 킥스타트
- 브루트포스
- 백준
- 운영체제
- linux
- kick start
- CSS
- AI
- 프로그래머스
- 코딩
- 리눅스
- DFS
- nlp
- 코딩 테스트
- 그래프
- dp
- 동적 프로그래밍
- 네트워크
- 코딩테스트
- google coding competition
- PYTHON
- 킥스타트
- 순열
- 프로그래밍
- 딥러닝
- 동적프로그래밍
- OS
- 알고리즘
- Today
- Total
목록Graph (2)
오뚝이개발자

개념 위상정렬이란 directed graph에서 꼭짓점을 방향성을 거스르지 않도록 정렬하는 방법이다. 실생활에서 대표적인 예시가 바로 선수과목(prerequisite)이다. 알고리즘 구현하는 방법은 아래와 같다. 연결성에 대한 정보를 가지고 인접리스트를 만든다. 이를 기반으로 in-degree(해당 vertex로 들어오는 선의 갯수) 정보를 담은 배열을 만든다. in-degree가 0인 vertex를 stack에 담는다. stack에서 pop하고 해당 vertex와 연결된 점들의 in-degree를 -1 한다. 3과 4를 반복하며 stack에서 pop 해줄 때마다 answer 리스트에 담으면 해당 결과가 위상정렬의 결과가 된다. 아래와 같은 그래프가 있다고 하면, in-degree(진입차수) 리스트는 아..
문제 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 나의 풀이 위상 정렬을 사용해 푸는 대표적인 문제이다. 위상 정렬의 개념을 모르겠으면 이 글을 참조하기 바란다. 코드 # https://www.acmicpc.net/problem/2252 n, m = list(map(int, input().split())) # adjacent list adj_list = [[] for _ in range(n+1)] ..