금일은 새로운 발제 내용이 나오는 목요일이다.
새로운 조가 형성되고 새로운 과제가 주어지는데, 항상 설레는 날인 것 같다.
오전에 시험을 봤는데 어제 공부한 알고리즘과 비슷한 문제가 나와서 시간이 부족해 다 풀진 못했지만,
나름 목표 만큼은 맞춰서 뿌듯했다.
아무튼 이번주는 C언어로 돌입한다.
이번주 과제는 알고리즘 문제 풀이가 아닌, Python에서 쉽게 가져다 쓴 자료구조를 직접 C 코드로 구현하는 것이다.
구현 자료구조는 블랙레드 트리 (BR tree).
먼저 이 자료구조가 어떻게 생겨먹은 놈인지 뜯어보고, 어떻게 구현할지를 생각해봐야 하기 때문에 코어타임 때 이론 내용 공부를 통해 부족한 부분을 채워나가기로 했다.
그리고 환경 설치를 위해서 터미널을 다뤘는데, 터미널 관련 명령어들에 대한 자료가 있어서 여기에 저장해 두겠다.
더 자세한 편집기 명령어들은 https://blockdmask.tistory.com/25 여기에서 참고하자.
과제에 대한 이해 및 마킹
Red-Black Tree 를 구현해야 한다.
구현하는 추상 자료형(ADT)는 ordered set, multiset 이라고 한다.
`ordered set` 은 집합(set)의 확장된 형태로, 요소들이 정해진 순서로 유지된다.
우리가 많이 사용하던 python의 heapify된 힙 구조와 같은 것들이 ordered set 이다.
`multiset`은 집합(set)과 유사하지만, 중복된 요소를 허용하는 자료구조를 말한다.
주어진 과제는 자료 구조 객체 생성, 메모리 완전 삭제, 데이터 삽입, 데이터 탐색, 데이터 삭제, 최소값 탐색, 최대값 탐색, 배열로 전환 이다.
특히 delete_tree(tree) 함수에서는 메모리를 반환하면서 valgrind로 나타나지 않아야 한다고 한다.
여기서 valgrind가 무엇인지 몰라서 알아봤다.
valgrind
valgrind는 C, C++ 등의 프로그래밍 언어로 작성된 프로그램들을 디버깅하는 도구이다.
주로 메모리 누수(memory leak)와 잘못된 데이터 접근(out-of-bounds-access)과 같은 메모리 관련 오류를 찾기 위해 사용된다고 한다.
valgrind는 리눅스와 유닉스 기반 시스템에서 사용할 수 있으며, 프로그램이 실행되는 중에 메모리를 추적하고 프로그램이 할당하고 해제한 메모리 블록을 추적한다.
또한 사용되지 않는 메모리를 감지하며 앞서 말한 메모리 누수나 잘못된 데이터 접근을 식별 및 검출한다.
또 반대로 프로그램의 성능과 메모리 사용을 분석해서 최적화할 수 있는 정보가 있다면 제공하기도 한다.
그래서 프로그램의 성능을 향상시키고 안정성을 향상시키고 싶다면 유용하게 사용할 수 있을 것 같다.
터미널에서 실행할 수 있는데, 명령줄에서 프로그램을 Valgrind와 함께 실행시키면 된다고 하니 디버깅을 할 때 사용해 보며 삭제되는 데이터가 검출되는지 확인해야 할 것 같다.
Sentinel node라는 것을 사용하여서 구현할 수도 있다는 힌트가 될 수 있을 것 같다.
공부하며 방향성에서 Sentinel node가 있다면 고려해 볼만할 것 같다.
'Jungle' 카테고리의 다른 글
[TIL][Krafton Jungle] 4주차 - (3) : RB Tree 공부 및 실제 구현 (0) | 2023.11.04 |
---|---|
[TIL][Krafton Jungle] 4주차 - (2) : 포인터와 디버깅 (1) | 2023.11.04 |
[TIL][Krafton Jungle] 3주차 - (7) : DP + 그리디 문제풀이 마무리 (1) | 2023.11.01 |
[TIL][Krafton Jungle] 3주차 - (6) : DP : 행렬 체인 / 프로시저 CS (0) | 2023.11.01 |
[TIL][Krafton Jungle] 3주차 - (5) : 신입사원 문제 + 플로이드 워셜 + LCS (2) | 2023.10.30 |