본문 바로가기
개발자 도전기/[SW사관학교 정글] 개발일지

정글에서 살아남기 | WEEK05 | 이런 C......!! Red-Black TREE 구현하기

by 답수 2021. 9. 12.
728x90
반응형

 

 

C 알파벳만 봐도 어질어질해짐... (사진은 기숙사 C동)

 

4주 간 알고리즘 던전에서 나왔더니 C언어의 지옥이 다가왔다...! 새로운 탐험 시작!!

 

운영진님들이 말하는 C언어란...

 

시작부터 겁을 주신다...ㅋㅋ 여하튼 C는 Assembly 언어와 매우 가까운 언어로, C를 사용하면서 조금 더 컴퓨터의 본질에 가까이 가는 것을 기대하신다고 한다.

 

그리고 이번 week05주 차의 키워드

WEEK05: 동적 메모리 할당, 포인터, 메모리 누수, 균형 이진 탐색 트리

저 단어들은 뭘까...? 뭐 알고리즘 할 때도 당연히 다 모르던 키워드들이었기 때문에 크게 신경쓰지 않았다. 결국엔 다 알게 될 것이기 때문에!!

 

 

1. 개발환경 설치

C언어 개발을 더 매끄럽게 하기 위해 Ubuntu 20.04 LTS (x86_64)환경에서 gcc 9.x 컴파일러를 사용하는 것을 권장하셨다.

 

나는 윈도우10 유저이기 때문에 윈도우에서 제공하는 WSL2(Window Subsystem for Linux 2)를 설치하였고, VScode에서 Remote-WSL 플러그인을 설치하여 비주얼스튜디오코드로 원격으로 ubuntu 환경에서 컴파일할 수 있게 했다. (쉽지 않았지만 그새 구글링 실력이 많이 늘어 있더라... 구글링으로 다 해결했으니...)

 

윈도우를 사용하는 동기들은 그래도 나름 수월하게 개발환경을 셋팅했지만, MacOS를 사용하는 동기들은 꽤 고생했다. 맥을 사용한 적이 없어서 잘 모르지만 윈도우에 비해 gcc 돌아가는 환경을 설정하는게 어려워 보였음... 난 평생 윈도우만 써야겠다...(그래도 사과달린 노트북 꼭 사용하고 싶음 언젠가)

 

 

2. C언어 기본 문법 공부

나는 4월부터 코딩을 공부하기 시작했다. 파이썬과 플라스크를 공부했고, 공부한지 얼마 되지 않아서 정글에 입학했기 때문에 C언어에 대해 무지했다.(아 유튜브로 하루 공부한 적 있다) 나뿐만 아니라 다른 분들도 C를 거의 처음 접해봐서 다들 파이썬과는 다른 언어에 매우 당황쓰.. 

 

아무튼! C언어 공부하면서 참고하면 좋은 사이트들(진짜 이분들 자료 있어서 매우 감사했다)

모두의 코드

코딩도장

 

당연히 어떤 학문이나 분야든 기초를 튼튼히 하는 것은 굉장히 중요하다. 지금 당장 기본 개념의 중요성이 떨어지더라도 장기적으로 일을 하다 보면 기초의 중요성이 점점 더 크게 느껴진다. 그렇기 때문에 만약 C를 공부하는 상황이 있다면 기초부터 차근차근 공부할 것을 매우 추천드린다(물론 나도 지속적으로 기본 개념들을 꾸준히 보면서 더 익혀야 한다ㅠㅠ)

 

아 그리고 모든 개념들이 중요한 것은 마찬가지지만 특히 포인터의 개념에 대해서 확실하게 잡는 것을 강조한다. 간단하게 얘기하자면 포인터는 메모리 상에 위치한 특정한 데이터의 (시작)주소값을 보관하는 변수이다.

 

현재 우리가 사용하는 컴퓨터는 대부분 64비트 운영체제이기 때문에 우리의 컴퓨터가 사용할 수 있는 주소값의 크기는 8byte이다. 즉 포인터가 가지는 크기도 8바이트!

(다만 포인터에도 여러 type들이 존재한다. int형 데이터의 주소값을 저장하는 포인터와 char형 데이터의 주소값을 저장하는 포인터가 다르다.)

 

포인터는 주소값을 보관하는 데이터의 형에 * 를 붙임으로써 정의되고, 특정한 데이터의 메모리 상의 주소값을 알고 싶다면 변수 앞에 & 를 붙이면 된다. 자세한 내용이 궁금하다면 위에서 추천한 사이트 추천!(그 외에도 구글링 하다 보면 충분히 이해하실거라 생각함!)

 

 

3. RBTREE 공부

이번 주를 정말 힘들게 했던 주인공 등장...! Red-Black Tree에 관련된 내용은 아래 링크로!

자료구조 | Red-Black Tree  ↓

 

자료구조 | Red-Black Tree

위키백과에 의하면 Red-Black tree(레드-블랙 트리)는 자가 균형 이진 탐색 트리로서, 대표적으로는 연관 배열 등을 구현하는 데 쓰이는 자료구조라고 한다. 레드-블랙 트리는 복잡한 자료구조지만

dapsu-startup.tistory.com

 

 

4. TEST

일주일 동안 레드-블랙 트리를 구현하는데 정말 많은 어려움을 겪었다. 정글에서 5주를 보내면서 제일 벽을 느꼈던 시간이었다. 조원 형들과 다른 친구들에게 많이 물어보면서 겨우겨우 이해하고 코드를 짰다. 더군다나 테스트에서 요구하는 방식과 다른 방식으로 구현해서 테스트 케이스 통과가 되지 않았고, 결국 테스트 보기 하루를 남기고 처음부터 다시 구현하기도 했다 ㅠㅠ..

 

일단 rbtree를 구현했다면 테스트 통과는 크게 어렵지는 않았다. 다만 노드의 개수를 카운팅하는 문제도 있었는데 시험 시간 동안 망할 vscode의 설정 때문에 한 시간 시험 중 45분을 날려먹으면서 마지막 문제는 해결하지 못 했다.. 아직도 갈 길이 멀다 ㅠㅠ 지금보다 더 빡세게 할 필요성을 확연하게 느꼈다.

 

 

5. WEEK05 이슈들

복통

이번 주 내내 복통이 끊임 없이 날 괴롭혔다. 시도 때도 없이 아랫배에 통증이 있어서 스트레스가 매우 컸다. 여기 와서 매일 만족하며 살고 있었는데(물론 공부량이 매우 빡세지만, 그래도 공부에만 몰입할 수 있어서 좋다) 복통으로 하루에 화장실만 5번을 가다 보니 시간을 공부에 몰두하기 힘들었다. 그나마 다행인 것은 화장실 갔다 오면 통증이 수그러진다는 점...어떤 때는 아프지 않아서 그냥 넘어갔지만, 요즘도 격일로 배가 아프다 ㅠㅠ 내일은 진짜 병원에 다녀와야 할 듯 싶다.

 

협력사 설명회(09/09) - 채널 코퍼레이션

처음으로 협력사 기업과 얘기를 나누는 시간을 가졌고, 다시금 열정에 기름붓기 충분했다. 일단 채널 코퍼레이션의 최시원 대표님이 진짜 너무 멋있었다. 남자가 봐도 반하ㄱ... 

 

여하튼 대표님 같은 경우 2010년부터 쭉 창업을 하셨고, 그러다 보니 사업의 본질, 즉 고객의 입장을 우선적으로 고려하시는 모습이 굉장히 인상적이었다. 나도 창업을 했을 때 항상 우리의 고객이 누구인지, 그들이 겪는 문제가 무엇인지, 그들에게 필요한 것이 무엇인지 등을 파악하기 위해 노력했지만 이게 진짜 쉽지 않다는 것을 잘 알기 때문에 항상 고객의 목소리에 귀를 귀울이시는 모습이 프로페셔널하게 보였고 그래서 지금 성공 차선 위를 달리고 있는 것 같다.

 

대표님의 설명 외에도 채널 코퍼레이션에 취업한 1기 선배님들에게도 많은 경험담과 조언을 들을 수 있었다. 함께 치킨, 피자를 먹으면서 많은 비하인드를 들었지만, 결론적으로 정글 커리큘럼을 잘 따라가기만 하면 충분히 잘 해낼 수 있다고 말해주셨다.(물론 그 커리큘럼을 따라가기 위해서는 지금보다 더 빡세게 집중하고 몰입할 필요가 있다!!!)

 


이번 5주 차를 하면서 느낀 점이 정말 많다. 정글에서 매일 10시간 이상 노트북을 두들기면서 나름 열심히 하고 있다고 생각했다 전보다 확실히 배운 것도 많고. 그러나 과연 이게 최선일까 하는 의문이 들었다. 단순히 열심히 하는 것 이상의 무언가가 필요하다고 느꼈다.

 

이 생각은 특히 이번 주 같은 조원 형 한 명을 보면서 느꼈다. 이 형님 같은 경우, 나와 마찬가지로 C언어에 대해 아예 무지한 상태였지만 아주 기초적인 개념부터 차근차근 공부를 했고, 조 회의 때마다 모르는 부분이나 궁금한 점이 있으면 언제든 적극적으로 잡아내서 끌고 왔다.

즉 '왜?'라는 질문을 당연하게 계속 던져 왔고, 그 때 나는 스스로에게 민망함을 느꼈다. 나는 과연 저 형이 궁금해 하는 부분을 제대로 알고 넘어갔을까? 그냥 조금이라도 더 편하려고 하지는 않았을까? 스스로에게 실망스러운 부분들이 많았다. 또한 이 형님은 마지막 날까지 다른 사람들이 이해하기 어려워 하거나 헤매는 부분들을 디테일하게 디버깅해주면서 많은 도움을 주는 수준까지 되었다. 그에 반해 나는 마지막까지 헤맸고, 이 형 도움으로 과제를 마무리할 수 있었다.

 

물론 기존의 배움과 경험의 차이가 있겠지만, 문제에 대해 얼마나 더 깊게 파고들었냐의 디테일에서 이런 차이가 보였다고 생각한다. 

 

Anyway!! 이번 주 느낀 점 정리!

  1. 개념부터 확실하게 익히자! 코드 구현을 결국 개념을 바탕으로 만들어진다!!
  2. 모르거나 궁금한 것들은 무조건 짚고 넘어가자! 대충 넘어가면 남는 것도 없다.
  3. 타인과 회의하거나 아이디어를 공유하는 시간을 많이 가지자! 나 혼자만의 생각에서 벗어났을 때 성장할 수 있는 길이 넓어진다.
  4. 내 생각을 정리하여 다시 말하는 습관을 가지자! 내가 이해한 것을 정리하고 계속 밖으로 꺼낼 때마다 내 것이 될 가능성이 커진다.
  5. 어떤 상황에서도 적극적인 태도로 임하자!!

 

매순간 최선을 다하면 뭐든 할 수 있다!!!!! 다시 빡세게 해보자!!!

728x90
반응형

댓글