저번 주차 회고록 빼먹고 몰아쓰는 회고록 Start
알고리즘 주차의 마지막 주는 여유로웠다. DP와 그리디라는 쉽지 않은 주제를 다루는 주였지만, 절대적인 문제의 양이 적었기 때문이었던 탓이겠지? 덕분에 많은 시간을 C언어 예습과 CSAPP 독서에 할애할 수 있었다. 파이썬과의 작별인사를 하고, C라는 새로운 친구를 만나기 위한 준비 시간을 보낸 느낌? 정글의 커리큘럼은 다~ 고려해가지고 짜여있다고 하니까, 아마 일부러 문제 수를 적게 배정한 게 아닐까 하는 생각이 들었다.
알고리즘 주차 초반까지만 해도 자료구조에 대해 공부할 기회가 많았다. 기초적인 자료구조들인 스택, 큐, 힙과 같은 녀석들... 주차를 거듭하며 고급 알고리즘들을 다루게 되면서, 자료구조와는 살짝 소원해졌지 아마? RB트리는 재회를 기다리기라도 했다는 듯 온몸으로 날 반겨주었고, RB트리와의 한 주는 그렇게 시작되었다.
5주차에는 복잡한 자료구조인 RB트리를 구현해내야 한다. 그것도 C언어로 😂 알고리즘 주차 내내 사용하며 익숙해진 파이썬으로 시도해도 가능할까 말까 싶은 RB트리 구현을 갑자기 C로 하라니.. 정말 정글답다면 정글다운 커리큘럼이다. 덕분에 C를 다뤄본 적이 있는 전공자들과 그렇지 않은 비전공자들 사이의 난이도 갭이 엄청났던 주차였다. 비전공자들은 C를, 그것도 Deep하게 공부하는 데에만 며칠을 꼬박 써야만 했었으니까. 나 역시도 그랬고, 앞으로 몇 주간 함께할 C를 여기서 확실하게 잡고 가지 못하면 죽도 밥도 안되겠다는 생각에 C를 익히는 데 많은 시간을 할애했다.
C에 대해 공부하는 것은 흥미롭고, 동시에 어려운 경험이었다. 기계어에 가장 가까운 언어라고 하는 C는 정말 딱딱하며 작은 언어지만, 만능이라는 느낌을 받을 수 있었다. 마치 작은 레고 블럭같은 느낌? 어째서 C가 이렇게 오래동안 업계에서 장수하는 지 알 수 있었다. CSAPP와 연계되어 생각할 점도 많아서, 재밌게 학습할 수 있었다.
하지만 악명높은 포인터부턴 어쩔 수 없이 머리가 아파왔다.. 하지만 어쩔 수 없지, 실력있는 동기들에게 물어보기도 하고, 그림을 그려 이해해보기도 하며, 포인터에 대해 그래도 어느 정도는 이해했다!고 말할 수 있는 수준까지는 끌어올릴 수 있었다. 하지만 아직 많이 부족하다. 공부할때 참고했던 유명 블로그에서 이와 비슷한 말을 봤다. "C는 공부할 것이 적어요! 하지만 그렇다고 쉽다는 말은 아닙니다" 정말 이 말이 딱인듯?
상술했듯 RB트리도 절대 만만한 녀석이 아니었다. 자료구조란 것이 이렇게나 복잡할 수 있구나.. 싶은 생각? 본격적으로 구현을 시작하면서부턴 매일 새벽이 되서야 숙소에 들어갔던 것 같은데, 그만큼 나를 괴롭히던 버그들이 많았다. 이에 대해서는 따로 블로그에 정리해놔야지~ 우여곡절이 많았지만 다행히 모든 문제를 해결하고 나만의 RB트리를 심을 수 있었다. 코치님이 "이번 RB트리 구현은 C언어와 친해지는 것이 주 목적이다." 라고 하셨었는데, 소기의 목적은 달성하지 않았나 싶다. RB트리 주차 전까지는 printf
나 벌벌 떨면서 쓰는 게 고작이었으니까 😁
벌써 정글에서의 여정이 100일정도밖에 남지 않았다는 말을 동기에게 들었다. 무언가에 몰입하는 경험은 이렇게나 시간을 빠르게 느끼게 하는구나 싶다! 매일매일 성장한다면 반드시 뭔가를 쟁취할 수 있다고 믿고, 내일도 정신없이 보내야겠다. 안녕!