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 |
Tags
- EER
- restapi
- frontend
- Django
- react
- 네이버 인턴
- ㅁㅇㅂ??ㅇㅈㄷ ㅎㅇㅌ...
- reversing.kr
- DBMS
- riceteacatpanda
- 방명록 만들기
- PyAmdecoder
- 인턴 후기
- JSTL
- 3단계 지역 DB
- 소프트웨어 개발보안 경진대회
- 행정지역 DB
- 정보보호병 후기
- webhacking 처음
- jsp
- 메모리 포랜식
- SessionAttribute
- Database
- Forensic 절차
- 동읍면 DB
- 인턴 지원
- spring
- 소개딩
- Layered Architecture
- mysql
Archives
- Today
- Total
웹찢남
[백준 2252 줄 세우기 문제] PYTHON 본문
이 문제는 위상 정렬을 사용해서 푸는 문제다.
위상 정렬이란 사이클이 없고 방향만 존재하는 vertex를 나열하는 것이다.
이 문제에선 키를 비교한 리스트에서 자신을 참조한 (자신보다 앞에선) vertex가 0인 것을 큐에 넣는다.
- 여기서 무조건 맨 뒤에 있는 vertex는 0이므로 무조건 값이 있음 -
그 후 queue를 while문을 통해 돌리며 자신을 참조한 value들의 참조값을 -1 하며
queue 내의 index를 remove하고 다시 참조값이 0인 vertex를 append하며 반복을 하면 된다.
코드로 구현하면 아래와 같다.
N, M = map(int, input().split())
indegree = [0 for i in range(N+1)]
Tlist = [[] for i in range(N+1)]
queue = []
answer = []
for _ in range(M):
a, b = map(int, input().split())
Tlist[a].append(b)
indegree[b] += 1
for j in range(1, N+1):
if indegree[j] == 0:
queue.append(j)
while(queue):
for i in queue:
answer.append(i)
queue.remove(i)
for t in Tlist[i]:
indegree[t] -= 1
if(indegree[t] == 0):
queue.append(t)
for ans in answer:
print(ans, end=" ")
'백준 Algorithm' 카테고리의 다른 글
[백준 1915 가장 큰 정사각형 문제] PYTHON (0) | 2021.08.23 |
---|---|
[백준 1916 최소비용 구하기 문제] PYTHON (0) | 2021.08.20 |
[백준 2056 작업 문제] PYTHON (0) | 2021.08.17 |
[백준 2293 동전 1, 9084 동전 문제] PYTHON (0) | 2021.08.17 |
[백준 15655 N과 M (6) 문제] PYTHON (0) | 2021.08.12 |
Comments