라이브러리&Module/표준라이브러리

수강할 과목의 순서를 구하려면?(#TopologicalSorter)(do it! 점프 투 파이썬-ch03)

JackSmith 2023. 1. 19.

이번에는! 3장의 <다양한 데이터 다루기> 편을 다룰건데요!

제가 이번편에서는 그냥 느낌가는 대로 공부해서 살짝 순서가 맞지 않을 수도 있습니다!

(양해 부탁드립니다!ㅜㅠ)

이번 시간에는 위상정렬을 이용해보는 시간을 가질 건데요!

그러기 위해서 graphlib에 있는 TopologicalSorter이라는 메소드를 사용해보겠습니다!

from graphlib import TopologicalSorter

일단 가져오기는 했는데, 이걸 사용하기 위해 위상정렬에 대해 간단히 짚고 가겠습니다.

<위상정렬 알고리즘>
-정렬 알고리즘의 일종
-정의: 방향 그래프의 모든 노드를 '방향성'에 거스르지 않도록 순서대로 나열하는 것
-용도: <순서>가 정해져 있는 일련의 작업들을 순서대로 진행해야 할떄
자세한 내용은 아래 참조:
https://www.crocus.co.kr/716

자세한 내용은 위 링크(crocus 사이트)를 참고해주시면 감사하겠습니다.

from graphlib import TopologicalSorter

ts = TopologicalSorter()

#규칙1
ts.add('영어중급', '영어초급') #영어중급의 선수과목은 영어초급
ts.add('영어고급', '영어중급') #영어고급의 선수과목은 영어중급

#규칙2
ts.add('영어문법', '영어중급') #영어문법의 선수과목은 영어중급
ts.add('영어고급', '영어문법') #영어고급의 선수과목은 영어문법

#규칙3
ts.add('영어회화', '영어문법') #영어회화의 선수과목은 영어문법

print(list(ts.static_order())) #위상정렬한 결과를 출력

위에서 기술한 노드들간의 관계도이다.

이렇게 그려줬으면 위상정렬 순서는 보기 쉽다.

필자 같은 경우에는 위와 같이 지그재그 형식으로 그려줬더니 순서가 바로 나왔다.

(1)~(5)까지 기슬하면,

['영어초급', '영어중급', '영어문법', '영어고급', '영어회화']

이렇게 나왔고, 실제 코드를 실행했을때에도,

 

출처:

https://wikidocs.net/104845

 

005 날짜를 계산하고 요일을 알려면? ― datetime.date

datetime.date는 년, 월, 일로 **날짜**를 표현할 때 사용하는 모듈이다. ## 문제 2019년 12월 14일부터 만나기 시작했다면 2021년 6월 5일은 사귄 …

wikidocs.net

 

댓글