상세 컨텐츠

본문 제목

Week 4. RB-tree Lab 주차 회고

일상기록장/크래프톤 정글 일지

by hyuga_ 2023. 11. 9. 19:41

본문

4주차가 끝이났다. 어느새 정글에 입소한지 한달이 지났다. 벌써 약 20%가 지난 것😨

익숙해졌다고 긴장을 늦추면 안된다는 생각을 하고 있는 요즘이다.

이번주는 경조사도 있고 뭐도 있고.. 그러다보니 마음이 살짝은 붕 떴던 것 같다. 자리를 비우는 시간이 좀 많았다. 

그래도 재미있는 팀원들을 만나서, 입소 이후로 가장 많이 웃었던(웃겼던) 일주일이었다. 

 

커리큘럼은 알고리즘이 끝나고 드디어 C언어를 사용하는 구간에 들어왔는데, 생전 사용해본 적 없던 C언어를 가지고 복잡한 자료구조를 구현해보는 것이 이번주 목표였다. 평소에 C언어 하면 막연하게 어려운 언어라는 인상만 갖고 있었는데, 두려움을 느낄 틈도 없이 그냥 익숙해지고 코드 짜기 바빴다.

 

그러다보니 어느새 조금은 익숙해진듯??

 

코치님들이 포인터 사용이나 이런거에 익숙해지면 이번주 목표는 이룬거라고 했는데, 일단 지난 일주일간 잘 사용해왔긴 했는데.. 나 익숙해진 거 맞나?? 뭔가 아닐듯 ㅎ 그래서 간단한 코딩테스트 문제를 C언어로 풀어볼까 생각중이다. 


이번주 배운 것

  • Red-Black Tree
  • C언어 기본적인 문법들
  • 포인터, 포인터의 연산
  • 동적 메모리 할당 맛보기 

이번주에 공부 못한 내용들

  • 가상화
  • CSAPP 7장, 8장

 

개인적 목표 점검

1. 매주 과제 완수율 90% 이상 달성하기 (아까운 실패.. 85%까진 올라왔다)
2. 주 3회 이상 운동하기 (턱걸이 성공)
3. 기록하기 (완수)
4. 알고리즘 스터디 참여 (스터디를 구성은 했으나, 아직 참석은 못했다.)

 

그래도 저번주 보다는 달성률이 좀 나아진듯??


rb트리 과제는 컴퓨터공학과 전공 수업에서 진행할 법한 방식으로 진행되었다. 

헤더 파일이나 테스트 파일이 이미 다 준비되어 있었고, 나는 열심히 함수 내용 채우고 디버깅을 하면 되었었다.

 

그리고 테스트가 끝나면 메모리를 얼마나 효율적으로 썼는지 등 결과까지 나와서 재밌었다.

전공하는 분들은 이렇게 잘 짜여진 과제를 수행하는구나.. 싶어서 부러웠다.

 

하면서 segmentation fault 등 처음 만나보는 에러를 많이 만났는데,

디버거를 아직 제대로 쓸줄 몰라서 프린트를 찍어보면서 하나하나 잡았다.

 

아래는 디버깅의 흔적.. 무수한 프린트들

 

 

 

1. segmentation fault → 해결법? 몰루. 어딘가 메모리 참조를 잘못하고 있다는 뜻으로 읽고, 걍 의심되는 코드 싹 다 뒤지면서 어색한 부분을 찾았다. 

 

2. 삭제연산으로 모든 노드를 지운 후에, 새롭게 insert를 해보니 에러가 또 다른 발생했다.

  • color를 출력하도록 로깅을 찍어봤더니 nil color가 red로 찍힘을 발견했다. 삭제 연산 중 fixup() 함수 마지막에 node를 black으로 바꿔주는 코드를 빼먹음. 그 결과 마지막 노드를 삭제할 때 nil 노드가 red로 바뀌어버리게 되어 발생한 문제였다.

3. 처음엔 스스로 짜봤지만 옆자리 앉은 정원이 말로는 코드에 에러가 한 12개 있다고.. 결국 타협하고 책 기준으로 수정했다. ..ㅋㅋ

 

4. 중위 순회를 한 다음에 순회 결과를 배열로 반환하는 tree_to_array() 함수를 구현할 때는 call by reference를 활용해서 구현해보았다. 포인터 활용을 연습해볼 수 있는 좋은 기회였다. 

 

5. 트리를 삭제해줄 때, free(t)만 하는 게 아니라 재귀적으로 모든 node를 free() 해주면서 올라오는 함수를 넣어줬어야 했는데, 다 끝나고 나서 깨달았다. 

결과적으로 약 2400 byte의 메모리 누수가 발생했다.

 

다가오는 malloc 랩에서는 이런 디테일에 조금 더 신경써야겠다! 

 

이번주 회고 끝 🫡

관련글 더보기