트랙
/
Python
Python
/
연습 문제
/
트리 구성
트리 구성

트리 구성

쉬움

지침

트리 구축 알고리즘을 리팩터링해봐요.

일부 웹 포럼은 트리 구조를 사용해서 게시물을 트리 형태로 보여줘요. 그런데 게시물은 보통 정렬되지 않은 레코드 집합의 형태로 데이터베이스에 저장돼요. 따라서 사용자에게 게시물을 보여줄 때는 트리 구조를 다시 구성해야 해요.

이번에 할 일은 고도로 추상화된 레코드를 위한 트리 구축 로직을 구현한, 동작은 하지만 느리고 지저분한 코드를 리팩터링하는 거예요. 레코드에는 ID 번호와 부모 ID 번호만 들어 있어요. ID 번호는 항상 0 이상이고 레코드 목록의 길이 미만이에요. 루트 레코드를 제외한 모든 레코드는 자신의 ID보다 작은 부모 ID를 가져요. 루트 레코드는 부모 ID가 자신의 ID와 같아요.

예시 트리:

root (ID: 0, parent ID: 0)
|-- child1 (ID: 1, parent ID: 0)
|    |-- grandchild1 (ID: 2, parent ID: 1)
|    +-- grandchild2 (ID: 4, parent ID: 1)
+-- child2 (ID: 3, parent ID: 0)
|    +-- grandchild3 (ID: 6, parent ID: 3)
+-- child3 (ID: 5, parent ID: 0)

예외 메시지

때로는 예외를 발생시켜야 하는 경우가 있어요. 이렇게 할 때는 오류의 원인이 무엇인지 알려 주는 의미 있는 오류 메시지를 항상 함께 넣어야 해요. 그래야 코드가 더 읽기 쉬워지고 디버깅에 큰 도움이 돼요. 오류의 원인이 특정 유형일 것이라고 알고 있는 상황이라면 내장 오류 유형 중 하나를 발생시켜도 되지만, 그래도 의미 있는 메시지는 함께 넣어야 해요.

이 연습 문제에서는 잘못된 트리 입력에 대해 ValueError를 "던지도록" raise 문이 사용되는 방식과 위치를 리팩터링해야 해요. 테스트는 코드가 적절한 exception을 raise하면서 그에 맞는 메시지도 함께 포함할 때만 통과해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

트리 구성 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.