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 |
Tags
- JSTL
- 소개딩
- restapi
- SessionAttribute
- PyAmdecoder
- DBMS
- Forensic 절차
- EER
- ㅁㅇㅂ??ㅇㅈㄷ ㅎㅇㅌ...
- 동읍면 DB
- frontend
- Layered Architecture
- 행정지역 DB
- 소프트웨어 개발보안 경진대회
- webhacking 처음
- react
- 인턴 후기
- 네이버 인턴
- jsp
- spring
- reversing.kr
- 3단계 지역 DB
- 인턴 지원
- mysql
- 정보보호병 후기
- 방명록 만들기
- 메모리 포랜식
- Django
- Database
- riceteacatpanda
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