이번주차부터는 파이썬을 버리고 C언어에 돌입한다. C언어로 자료구조들을 공부하는 것이 메인인것 같은데, 포인터를 다시 만나야 할 생각에 머리가 아팠다.
개발환경 세팅
이번 주차부터는 특이하게 리눅스 환경에서 gcc를 이용하여 컴파일하고, 디버깅해야 한다.
아마 PintOS를 대비해서 CLI 환경에 익숙해지게 하려는 것이 목표인것 같은데.. 사실 정말 좋은 커리큘럼인것 같다.
프로젝트 시 백엔드와 배포를 맡아서 했었는데, 그 떄의 경험으로 리눅스가 개발자들에게 얼마나 편리하고 쓸만한지 몸소 느꼈기 때문이다.
다들 첫날엔 개발환경을 세팅하느라 정신이 없었다. 하루를 꼬박 날려먹은 사람들도 있는 것 같았고..
나는 WSL을 이미 사용 중이었고, vscode만 WSL에 연결해주면 되어서 다른 사람들 도와주는 것에 시간을 더 썼다.
나는 jetBrains 신봉자인데, 이상하게도 WSL에서 CLion이 자동완성이나 컴파일이 도저히 안되어서 울며 겨자먹기로 vscode에 intellij 세팅을 가져와서 사용하고 있다ㅠ
과제
이번 주차부터 8주차까지는 과제가 나온다고 한다. 이번 주차에는 연결리스트, 스택, 큐, 이진 트리, 이진 검색 트리 등의 자료구조를 이미 대부분 완성된 코드를 참고하여 빈 함수를 채우면 되는 식이다.
나는 학부 때 이미 C언어로 자료구조를 구현해본 경험이 있기 때문에 그렇게 어려운 일은 아니었다. 함수를 채워가면서 느낀게 오히려 자료구조를 처음부터 끝까지 정글러 스스로 구현해나갔으면 훨씬 좋았겠다는 생각이 들었다.
정글러들 중에는 C언어 자체가 처음인 사람들도 여럿 있었다. 처음 C 언어를 배웠을 때 포인터에서 느꼈던 좌절감.. 정말 상상하기도 싫다. 이 때 동료학습이 빛을 발할 때가 아닌가! 이미 C를 처음 접하는 사람들을 위한 스터디도 만들어지고, 코어타임도 이들이 포인터의 벽을 무사히 깰 수 있도록 짜여졌다. 부디 모두 무사히 포인터를 뚫고 함께하는 여정이 되었으면 한다.
공부 키워드
이번 공부 키워드는 많다. 정말 많다.
이전에 이미 한번 키워드로 나왔던 B 트리와 트라이, 위상정렬이 복습 개념으로 들어가 있는 듯 하다.
B-트리
[B 트리 | Notion
B트리는 하나의 노드에 많은 수의 정보 저장 가능
verdant-bathtub-bae.notion.site](https://verdant-bathtub-bae.notion.site/B-1c77bb7778c98010b294da2780d1f4e5?pvs=4)
[B 트리 | Notion
B트리는 하나의 노드에 많은 수의 정보 저장 가능
verdant-bathtub-bae.notion.site](https://verdant-bathtub-bae.notion.site/B-1c77bb7778c98010b294da2780d1f4e5?pvs=4)
이미 정리해두었던 개념이니 가볍게 한번 읽어보기만 해도 충분했다.
그 다음엔 GCC, 가상화, 포인터, 동적 메모리 할당, malloc, calloc, realloc 등이 키워드로 등장했다.
글쎄 GCC는 무엇을 공부해야 할까? 감이 잘 안잡힌다.
포인터나 동적 메모리 할당이야 반드시 필요한 개념이니 복습하고 지나갔다.
그 다음 Optional로 KMP, 보이어-무어 알고리즘이 등장했다. 문자열을 검색하는 알고리즘인데, 이 또한 정리해두었다.
KMP
보이어-무어
[보이어-무어 알고리즘 | Notion
패턴의 마지막 문자부터 text와 비교
verdant-bathtub-bae.notion.site](https://verdant-bathtub-bae.notion.site/1d57bb7778c9807d9488e8bbd350c596?pvs=4)
[KMP 알고리즘 | Notion
DFA 기반 KMP
verdant-bathtub-bae.notion.site](https://verdant-bathtub-bae.notion.site/KMP-1d57bb7778c980a59cd1f6d955a25377?pvs=4)
확실히 학부 때 배운 내용 중 버릴만한것이 단 한개도 없다. 이런 생각을 할 때마다 편입하지 않고 바로 컴공에 입학했으면 내 실력이 지금보다 두배는 더 좋았겠다는 생각이 자꾸 든다.
후기
저번부터 계속 트라이나 KMP 같은 문자열 검색 알고리즘이 자꾸 공부 키워드로 뜨는데... 아마 Pintos에서 grep이나 파일 이름 자동완성 같은것을 사용하는게 아닐까?? 하는 생각이 자꾸 든다.
그러면... 다음 주차의 주제인 RB 트리도 Pintos를 위한 빌드업이 아닐까? 과연 어디에 쓰일지..