본문 바로가기
💻 프로젝트/정글 사관학교

[정글 SW사관학교] WEEK4. 뒷심 부족

by ddubbu 2024. 9. 6.

🤔회고

 

썸네일 설명

문득 식당 의자를 보았는데, Red & Black 구성으로 RB 트리 그 자체라 동료들에게 공유했던 상황이다. RB트리에 흠뻑 빠졌던 한주를 표현해보았다.

 

 

코치님의 모든 말에 제대로 답변하고 싶다.

용기내어 점심 합석! 대면한 덕분에 '답변에 뒷심이 부족하다'는 말이 과거와 달리 진심어린 조언으로 들렸다. 추후 제대로 답변 잘했다는 피드백을 받고 싶다. 그래서 이번 4주차에서는 더 많은 팀활동과 설명 시간을 가져보려한다. 또한 의도적으로 시험 리뷰 시간에 발표를 하려고 하고있다. 동료들에게 전하고 싶은 개념이 있는 문제 위주로 말이다. 내 개념에 갇히지 말고 열심히 지식을 교류해보자. 그 시간을 통해 내가 모르는 것은 채우고 아는 것은 더 단단하게 만들어보자. 그리고 시험리뷰할 때 앞으로는 외워서 해볼 수 있을까?? 너무 개념을 패스하는거 아닐까? 내가 알고있는 것에 갇혀있다는게 설명하면서 더 느껴진다. 질문에 답하지 못한 막힌 것들을 다시 개념을 잡고 단단하게 만들어보자.

 

+) 휴게실 방문 시 타이밍이 좋으면(?) 코치님의 대면 QnA 타임이 펼쳐진다. 이번에는 엮이고 엮여 약 10명 정도가 30분가량 서있었던 것 같다. RB트리를 배우는 주간이었고, 왜 O(1) 시간 복잡도를 갖는 해시테이블이 아니라 O(logN) BST 를 배워야하는지 함께 사고해볼 수 있었다. 조각난 개념들이 합쳐지는 진귀한 경험을 했고, 점차 또렷해지는 내 지식과 답변에 만족스런 날이었다.

 

 

나에겐 심장 떨림이 곧 몰입과 재미

커피 믹스 2잔을 먹어서일까, C언어라는 두려웠던 언어를 극복할 수 있을거란 기대감일까, 아님 저번주에 팀활동을 적극적으로 해보겠다는 다짐에서일까. 이유가 뭐든 간에 WEEK4 이틀째부터 엄청나게 몰입하고 지식을 습득하고 있다. 그리고 매우 각성 상태인 것 같다. 오랜만에 온 이 집중 상태를 유지하고 싶어서 금요일 새벽 2시까지 달리고, 토요일 아침 일찍 춝근했다. 개념을 깊이 학습하고 있는건 아니지만, 확실한건 내가 개념은 약해도 응용을 잘하는 것 같다. 예전이라면 콘솔/프린트로그에 만족했을 것을 이곳 정글 덕분에 gdb로 C언어 디버깅하는 방법, 더 나아가 Makefile로 comile, run 일련의 과정을 스크립트화 했다. 물론 과거와 다른 점은 GPT 라는 선생님이 없었다. 근데 돌이켜보면, 대학생 시절 구글링할 생각을 못 떠올린 것 같다. 그냥 맨땅에 헤딩과 printf만 반복하며 BST 구현 과제 마무리를 못했던 아쉬움이 기억난다. 확실히 그때와 비교해 성장했음이 느껴지고 무엇을 학습해야할지 방향성이 보인다. 어떤 환경을 세팅하면 (예를들어 포매터, Extension) 개발 속도 향상에 도움이 될지, 키워드를 통해 어떤 요구사항을 원하시는지 등을 알고 하나하나 원하는 바를 찾아내어 여러 Debug 방법을 알아내었다. 결국은 prinf 를 쓸 것 같긴 한데 debug breakpoint 출력 형태보고 사용할 수도 있을 것 같다. 무튼 이 떨림 원동력 삼아 이번주차 재밌게 공부해보자.

 

뒷심 부족

수요일이면, 나는 마음이 편안해진다. 과제를 다 끝냈냐? 아니다. 그냥 더 해도 달라질게 없겠다고 생각했거나 지쳤거나, 쨌든 나는 저녁 9시 무렵 일찍 퇴근한다. 분명 끝까지 모든 과제를 내 것으로 체화하자는 목표로 들어왔지만, 나는 과거의 습관으로 돌아가려하고 있다. 물론 정글 커리큘럼이 100% 따라가기는 어렵다. 하지만 나는 그에 가까이 가기위해 노력했냐?에 답을 못했기 때문에 반성하고 있다. 그리고 이번 주차에는 괜히 오바해서 비전공자 동료들을 기본부터 함께 팀활동해보겠다는 목표 때문에 초반에 일찍이 지쳐버렸던 것 같다. 개인 공부와 팀활동의 적정선을 여전히 찾아가고 있나보다. 사실 이 회고를 5주차 둘째날 때 하고 있다. 어느 정도는 개인플을 해도 될 것 같아서 기대되고, 교과서 내 메모리 블록 개념을 재밌게 공부하고 있다. 1등보다 꾸준히를 목표로 하자!

 

📅필수 목표

 

여유부린 시간들이 모여, 마지막 내 커리어가 된다

"잘하는 사람은 계속 잘하게 된다"  (문제수를 한정하지 말라는 코치님의 조언)

- 앞으로 LeetCode 매일 1시간 (카테고리별 추천 기능 살펴보기)

 

[240829 목] 09시 ~ 17:30 (8H 30min, 이후 회식 및 휴식)

동전류 복습 : #2294 동전2, #2624 동전 바꿔주기 #9084 동전

✅ 10:30 테스트 및 리뷰

✅ 동료 PR 리뷰

18 ~ 20 4조 회식

✅ WEEK4발제 및 RB 트리 계획 수립

 

[240830 금] 08시 ~ 01:30 (17H 30min)

팀활동 준비 - C언어 익숙해지기 (LeetCode, 백준 문제 추출)  

9:30~ 오전/ C언어 특강

팀활동/ C언어 복습 (자연스럽게 설명하는 시간 가짐) 및 Linked List 맛보기

C언어 문법 공부 (백준, 적당히 하고 LinkedList 개념 넘어가기)

LinkedList 구현 (dummy head vs with data)

Tree 구현

(x) Single말고 Double로 해야하나? Parent 필요한지 체크하고 Double Linked List로 구현하기

AWS 서비스 정리

(8.31 00:54 스샷) 주요 서비스 ELB, VPC 제거 완료

 

 

[240831 토 ] 8시 ~ 20시 (12H, 점심 후 졸려서 자리 환기 및 음료, 강의 보면서 버팀)

레포 다운로드 & 원격서버 세팅 먼저해서 공유드리기 - 목적:  gdb 디버거 사용법

-- 정리 필요 (SSH 연결 시 주의사항 정도, C 디버깅 방법, 환경 세팅 꿀팁 - formmater, extension 등)

Daily 알고리즘/ LeetCode python 1시간 (점심 전 30분, 점심 후 30분(예정)) ; LeetCode 적응하기, 배열 특히 LinkedList로 되어있는 I/O 적응으로 헤맴

빠트린부분, 양방향 트리 (GPT 도움 - insert, search 까지만)

16시/ 팀활동 Single LinkedList, Tree 확인 (+ Tree w. parent node)

RB 트리 강의 듣기 [링크]

🤔 Insert, Delete 연산이 머릿속에 안 잡힘, 어떻게하면 정리할 수 있을지 고민됨

 

 

[240901 일] 9시 30분 ~ (점심 후 2시간 수다 및 잠 깨기)

9:30/ 팀활동 - LinkedList, Tree 코드 리뷰

[Introduction To Algorithms] 교재 의사코드 보고 > 로직 감 잡기

❌LeetCode 1시간

❌22/ 팀활동 - RedBlack Tree 개념 공유 (개념 확립 안됨, 리드할 수 없어서 역할 분담)

VSC SSH 연결 및 디버그 모드 세팅 (Code Runner)

 과제 구현 감잡기 (test_init, test_insert_single) 두개 구현해봄

 

[240902 월] 8:40 ~ 21:30

❌LeetCode 1시간

14시-18시/ 팀활동 RB Tree 삭제 3-4 케이스 설명하기, SSH 연결 및 프로젝트 세팅 헬프

과제/ BST 로직만 우선적으로 구현

 

[240903 화] 10:30 ~ 01:00

❌ LeetCode 1시간

  국취제 1유형 심사 승인 전화

🔼 과제/  [Introduction To Algorithms] 교재 참고해서 insert, delete 구현하기 > 결국 선배 기수 블로그 참고함


[240904 수] 11:00 ~ 19:30 (저녁 식사 후, 운동 및 개인 정비)

LeetCode 점심 전 후 2문제

"혼자 공부하는 컴퓨터구조 + 운영체제" 읽기 (~CH4)

- C/ 전처리, 컴파일, 실행 순서 알아보기

- C/ 퀴즈 풀어보기

❌ 과제 정리하기 (새 테스트 돌려보기 및 과제 제출로 끝. delete 연산 실패함)

 

[240905 목] 09:40 ~ 22:30 (이후 회식)

4주차 리뷰 및 퀴즈

❌ RBTree 코드 리뷰 (w. 지인님) - skip 및 바로 머지

5주차 계획

 

[시간 남으면]

- "혼자 공부하는 컴퓨터구조 + 운영체제"  읽기

- 하버드 CS50 https://cs50.harvard.edu/x/2024/

 

C 프로젝트 설정하면서 추가로 알아볼 것

- 전처리, 컴파일, 실행 순서 알아보기

- 헤더파일 분리 방법

- 전처리기 #infndef 등 알아보기

 

C언어 복습

-- 동적할당

-- 자료형별로 차지하는 크기 공부하기 (struct, union, pointer 개념 섞어서)

-- C문법 관련 질문 답변 필요 [슬랙]

 

🔥추가 정리 필요

트리 종류
트리, LinkedList 무방향, 방향, 순환 개념 헷갈림..트리는 비순환일뿐, 무방향(곧 양방향)이다.

 

Memory Segment

Q. 영역을 나누는 이유?

A. (찾아보기)

 

Q. malloc 을 왜 쓰냐?

A. 메모리를 필요한 만큼만 할당하고 싶어서, 미리 알 수 없을 때 => dynamic allocation인 이유

 

다음주 과제와의 연관성

보통은 buffer 를 미리 잡고 변수를 전달하는 식을 많이함 > 이유는 free가 중복 처리될 수 있고, 할당과 해제가 번잡하면 안됨. > (내 생각) 주체를 call 하는 쪽에서 관리하게끔 하려는걸까??

 

Q. 왜 python 등은 해제를 고민하지 않아도 되는지?

garbage collection이 알아서 해주기 때문

Q. 그럼 어떻게 작동하는지 알아보자

더이상 사용하지 않는다는건? 참조하지 않는다는 것? 

 

extra

- 함수내에서 선언한 값을 바깥쪽으로 넘길 수 없음

- 런타임 시점에 메모리 할당을 위해서

- 지역변수는 함수가 호출될 때, 다만 메모리가 깨끗하게 정리되지 않음

 

Q. debug 툴 익숙해지기, gdb, valgrind

 

Q. node 크기 더 줄여볼 수 없을까? (특히 color 8 bit 다 쓰지말고 어떻게 알 수 있을까?)

- linux 커널 - RBTree 구현체 살펴보기

- parent 주소의 오른쪽 bit 사용하기

주소

0x00000 = bx0000

0x00008 = bx1000

 

- short, char 등의 타입으로 줄일 수 있음

- padding 조심해야하는 이유 : bus 에러?

--  64bit CPU > 8byte 단위로 움직이는게 좋음

 

Q. 컴파일 결과를 봤는지?

A. assembly 언어 수준으로 볼 수 있나??

 

Q. BST를 사용하는 method

python : sortedcontainers

java : treeset, treemap

C++ : set, map

---

hash를 사용하는 것은?

기본적인 set, map

 

 

📝메모

DB Index : Hash vs balanced BST

서치 시 O(1) 연산인 Hash 가 아닌 BST 를 사용하는 이유는?

범위 검색 시 Hash 기법은 O(M)이 되므로, BST O(logN)이 유리함

DB INDEX 문법

 

LeetCode vs BOJ

- 일요일마다 오전 대회 있음, 전세계 순위 체험해봤으면

- BOJ 와 달리 function level로 I/O 핸들링
- 틀린 부분에 대한 피드백을 줌

- 이후 심화 알고리즘 주차 때 LeetCode로 학습할 예정

 

WEEK4 ~ WEEK6 과제 관련 메모

- week05는 무조건 ubuntu 작업환경 맞춰야함 (나머지는 괜찮음)

- 도커이미지로도 해보려면 하고, 쨌든 클라우드 서비스 익숙해져보기 - 좋은 조합을 찾는 능력

 

VSC에서 C 컴파일 및 실행 설정하기 [블로그]

- 필자는 실행 커맨드 [Ctrl] + [Alt] + R 로 설정

- 추가로 VSC에서 C formmater 적용하기

 

LeetHub 연동하기 [Chrome Extension]

- 주의사항 : LeetCode old version으로 전환 후 Submit 필요

- 참고 블로그

 

5주차 과제 훑기

- malloc 직접 구현하기

- heap 영역 사용할 예정

- 정답이 없고 구현방식은 4가지 다 해보기 (장단점, 패턴 비교 분석해보기, 속도 문제)

- 4주차부터는 되도록 답을 안보고 직접 구현하는 것을 추천함 (미래를 위한 것임) (코드, 디버깅 실력 향상을 위함)

- implicit은 교재에 많이 나와있음

- # 정글9기_질문 채널 운영할 예정 (추후 OS 프로젝트를 위함)