관리 메뉴

클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

다양한 데이터 다루기 4 - 숫자에 이름 붙여서 사용하기 및 위상정렬로 과목의 순서 정하기 본문

프로그래밍 언어/파이썬

다양한 데이터 다루기 4 - 숫자에 이름 붙여서 사용하기 및 위상정렬로 과목의 순서 정하기

huenuri 2024. 10. 6. 11:14

이제 두 단원만 남아있다. 데이터 라이브러리에 대해 이어서 학습해 볼 것이다.


 

 

 

 

숫자에 이름을 붙여 사용하려면? - enum

enum은 서로 관련이 있는 여러 개의 상수 집합을 정의할 때 사용하는 모듈이다.

다음과 같이 날짜를 입력하면 그날의 요일에 해당하는 점심 메뉴를 반환하는 get_menu() 함수를 만들었다.

 

 

요일별로 출력이 되었다. 이 코드를 enum 라이브러리를 사용하여 쉬운 코드를 변경할 수 있다.

 

 

Week 클래스는 enum.IntEnum을 상속하여 만든 Enum 자료형이다. 이렇게 숫자를 바로 사용하지 않고 Enum 자료형을 만들어 상수로 사용하면 유지보수에 유리하며 가독성도 좋아진다.

 

 

Enum 자료형 활용

enum.Enum을 상삭하여 만든 Enum 자료형에는 다음처럼 name과 value 속성으로 접근할 수 있다.


 

 

 

for 문으로 이처럼 반복할 수 있다.

 

 

enum - 열거형 지원

 

enum — Support for enumerations

Source code: Lib/enum.py Important: This page contains the API reference information. For tutorial information and discussion of more advanced topics, see Basic Tutorial, Advanced Tutorial, Enum Co...

docs.python.org


 

 

 

 

 

수강할 과목의 순서를 구하려면? - graphilib.TopologicalSorter

graphilib.TopologicalSorter는 위상 정렬에 사용하는 클래스이다.

 

위상 정렬이란?

위상정렬(toplogical sorting)은 유향 그래프의 꼭짓점을 변의 방향을 거스르지 않도록 나열하는 것을 의미한다. 위상 정렬을 가장 잘 설명해 줄 수 있는 예로는 대학의 선수 과목 구조를 들 수 있다. 특정 수강 과목에 선수 과목이 있다면 그 선수 과목부터 수강해야 하므로 특정 과목을 수강해야 할 때 위상 정렬을 통해 올바른 수강 순서를 찾아낼 수 있다. 이와 같이 선후 관계가 정의된 그래프 구조에서 선후 관계에 따라 정렬하고자 위상 정렬을 이용한다.


 

 

영어에 관심이 많은 A 학생은 5개의 영어 수업을 수강하고자 한다. 그런데 각 과목에는 선수 관목이 있어서 순서에 따라 수강해야 한다. 

 

앞서 본 영어 수섭의 선수 과목을 나타낸 그림은 다음과 같다.

 

파이썬이 제공하는 graphlib의 TopologicalSorter를 사용하면 이 문제를 풀 수 있다.

 

 

 

add(노도, *선행노드) 함수는 특정 노드에 선행 노드를 추가할 때 사용하는 함수이다. 선행 노드는 1개 이상도 지정할 수 있다. 즉, 다음과 같이 사용해도 된다.

 

하지만 책과 달리 순환 오류가 발생하지는 않았다.

 

 

graphlib - 그래프와 유사한 구조에 작동하는 기능

 

graphlib — Functionality to operate with graph-like structures

Source code: Lib/graphlib.py Exceptions: The graphlib module defines the following exception classes:

docs.python.org

 


 

 

학습을 마치고

이것으로 데이터를 다루는 라이브러리 학습을 마쳐본다. 생각했던 것보다 학습 분량이 많아서 2배는 더 걸릴 것 같다. 그래도 포기하지 않는다면 충분히 마칠 수 있을 거라 생각한다.

드디어 오늘의 첫번째 공부를 시작했다. 이제 수학과 숫자를 다루는 내용을 학습해 볼 것이다.