[WIL5] Red Black Tree

민픽minpic·2023년 5월 16일
0

크래프톤 정글

목록 보기
4/7

알고리즘 4주차가 끝난 후, C언어를 사용하여 RBtree를 구현하는 프로젝트가 진행되었다.

지난 정글에서의 시간 중에 가장 열심히 공부하고 노력했던 시간이 아니었나 싶다. 알고리즘 주차를 진행할 때도, 열심히 한다고 생각했는데, 더 열심힐 할 수 있는 나를 발견했던 주차였다..

해당 프로젝트는 EC2 uduntu 환경에서 진행했고, C언어 문법을 공부하고 C언어로 red black tree 를 구현하는 프로젝트였다.

직접 red black tree 삽입, 삭제를 구현하고, 이미 작성된 테스트코드를 기반으로 해당 로직들이 잘 구현되었는지 확인하고 리뷰하며 마무리 된다.

일주일이라는 시간 동안 C언어 문법 배우고 구현까지 해내야하고,이외 책읽고 토론하는 과제까지 있어서 굉장히 쉴틈 없는 주차였다.

잠도 많이 못자고 체력적으로 많이 힘들었지만 만족스럽게 팀원들과 많은 것을 얻어갈 수 있었던 주차여서 의미있는 한주였다. 또 개인적으로 팀원들과 교류를 많이 할수 있던 주였고, 많이 가까워질 수 있던 시간이었어서 나에게는 고마운 한 주였던 것 같다.

우리에게 주어진 시간은 목요일 오후부터 다음주 수요일 밤까지이다.
그래서 목,금,토,일 까지 C언어 문법을 익히고, 레드블랙트리 기본 개념에 대한 공부를 깊게 하기로 했다.

구현을 하는 것도 중요하지만, 해당 알고리즘을 왜 사용하는지, 정확하게 어떻게 삽입과 삭제가 이루어지는지 아는게 중요하다고 생각했다.
더 나아가서 해당 알고리즘을 남에게 설명 할 수 있을 정도로 아는 것이 중요하다고 생각했다.
그래서 자발적으로 해당 개념을 익히고 RBTree 발표를 하면서 나의 것으로 만드는 것에 집중했다.

그리고 월요일 부터는 구현에 들어갔다.
삽입 연산은 최대한 스스로 로직을 생각해보고 구현하도록 노력했다.
주어진 테스트는 통합테스트는 가능했지만, 유닛테스트에는 어려운 부분이 많았어서 주어진 테스트코드 이외에도 스스로 테스트코드를 더 추가하면서 테스트를 진행했다.

삽입 구현을 하면서 포인터 개념이 적응하는데 시간을 썻던 것 같다. 특히 포인터를 사용해서 부모노드와 조부모노드 그리고 삼촌 노드까지 찾아서 처리하고, 로테이션 부분까지 처리해야해서 코드를 구현하는 것도 읽는 것도 복잡했다.
그리고 개념을 공부한 것을 기반으로 수도 코드를 작성해보고 정리하고 구현하여 삽입 구현을 잘 마무리 할 수 있었다.

하지만 삭제 연산을 구현할 때는 어려움을 많이 겪었다. 우선 남은 시간이 많지 않아서 시간 분배에 실패했었다. 그리고 알고리즘 책에 구현되어있는 수도 코드 조차 이해하는데 생각보다 오래걸렸다. 삽입 구현보다 처리해야하는 케이스도 많고 복잡했던... ㅠㅠ
심지어 책을 보면서 꾸역꾸역 구현을 완료하고 나서도 수요일 새벽 3시가 넘는 시간까지 테스트코드 통과가 안되어 디버깅하며 시간을 보내고 완성하여 제출했다.(같이 남아서 의리 지켜쥰.. 그린반 친구들.. 고마워요..><)

그렇게 많은 것을 느끼고 얻었던 5주차의 시간을 잘 보냈다.

profile
사진찍는 개발자 / 한 가지 개념이라도 깊이있게

0개의 댓글