SW사관학교 정글/정글일지

[WEEK04] 탐험준비 - Red-Black Tree

아크리미츠 2024. 8. 16. 13:48

4주차가 지나가면서 동기들의 개발일지를 봤는 데 자신이 새로 알게 된 알고리즘이라던가 코드같은 것들을 설명하고 정리하면서 깔끔하게 정리해놨는데, 내 개발일지는 너무 일기장처럼 그냥 느낀 점만 주저리주저리 써놓은 것같아서 조금 부끄러워졌다. 그래서 대신에 백준 알고리즘 리포지토리 외에 정글에 코드 아카이브를 따로 만들어서 새로 짜본 코드라던가 그런 것들을 저장해 놓기로했다.

 

이번 주에 깃허브의 아카이브에 내가 만든 모든 프로젝트를 삽입하고 싶어서 관련된 기능을 찾아보게 되었는데 깃허브에 subtree와 submodule이라는 기능이 있는 것으 알게 되었다. 이를 사용해 보려고 시도하다가 2시간 정도를 태워 먹었는데, IDE에서 지원해주는 깃허브 관련 기능이 생각보다 많이 없었다는 것을 알게 됐고, 어지간한 기능은 거의 터미널을 사용해서 입력해야 한다는 것 또한 알게 되었다. 그래서 겸사겸사 깃허브에 대해 공부하게 되어서 2시간 정도를 더 날려 먹었다. 그래도 subtree를 아카이브에 구현하여 rbtree를 삽입하고 이를 pull 하는 기능까지 알게 되었으니 쓸모없이 낭비한 것이라는 생각은 들지 않는다. 자동으로 서브 트리의 내용을 확인하는 기능은 찾지 못했는 데, 다음에 이 기능이 있는지 확인해 보면 좋을 것 같다.

리포지토리 확인
$ git remote -v
리포지토리 연결 해제
$ git remote remove origin
리포지토리 연결
$ git remote add origin https://github.com/Arklimits/swjungle-archive
서브 트리 할당
$ git subtree add --prefix archive/rbtree https://github.com/Arklimits/swjungle-rbtree main
서브 트리에서 받아오기
$ git subtree pull --prefix archive/rbtree https://github.com/Arklimits/swjungle-rbtree main

 

프로그램 구동 환경은 아마존에서 지원하는 EC2로 Ubuntu 서버를 열어서 프로그램을 구동했었는데, Docker에서 가상환경을 구성해보고 싶다는 욕심이 들어 Docker로 Devcontainer를 구성해봤다. 사용법을 잘 몰라서 이것저것 누르다가 개발환경이 만들어지긴 했는데, 생각보다 잘 작동해서 다음에 다시 제대로 공부해보기로 마음먹었다.

 

처음에 프로그래밍을 할 때는 vscode가 불편한 것 같아서 Jetbrains의 IntelliJ나 Pycharm같은 IDE를 사용해서 구현했는데, 시간이 갈수록 그냥 vscode가 더 편한 것 같다는 생각이 들어서 vscode로 모두 해결하기로 마음먹었다. 바닐라 상태의 vscode는 진짜 그냥 코드만 보여주는 프로그램 수준이었는데 확장 프로그램을 이것저것 깔다보니 vscode가 더 편해진 것도 있었고, SSH환경에서 프로그래밍할 때는 Jetbrains의 프로그램들은 너무 무거워서 EC2의 무료서버에서 돌리기에는 한계가 있었다. 탐색기도 vscode를 사용할 때 훨씬 더 편하고 Docker에서 개발환경을 만들었을 때도 vscode는 읽고쓰기가 드래그 앤 드롭 같은 걸로 모두 자유롭게 되는 반면 CLion에서는 읽기 밖에 안되는 불편함도 있었다.

 

RBT를 구현하는 방식은 BST에서 fixup을 추가하여 RBT를 구현하려고 했는데, 이 때 어려움이 좀 많았다. 그래서 빈 강의실에서 잠시 머리를 식히고 있었는 데, 코치님께서 들어오셔서 천재들이 만들어 놓은 트리를 왜 직접 구현하려고 하고있냐고 하셨고 이번 주차의 주 목적이 무엇인지 생각해보게 해주셨다. 사실 이번주의 목적은 트리의 마스터가 되는 것이 아니라 Pintos 프로젝트를 진행하기 전에 C언어와 Linux 환경을 배우고 많이 써보는 것이 목적이라는 것을 깨닫게 됐다. 그래서 직접 구현하려던 모든 것을 포기하고 그냥 학습하고 나머지 시간에는 RBT가 나오게 된 이유라던가 CS공부 및 C언어와 Linux에 대해서 공부했다. 지금와서 생각해보자면 알고리즘 주차도 알고리즘 풀이 고수가 되는 것이 목적이아니라 알고리즘을 어떤식으로 학습하고 사용해야 하는지를 아는 것과 이 알고리즘이 왜 나왔고 어떤 식으로 사용되고 있는지, 그것을 어떻게 응용할 수 있을지를 아는 것이 더 중요했던 것 같다.