본문 바로가기
[Review]/Book

[도서 리뷰] 이것이 자료구조+알고리즘이다(with C언어)

by 해피빈이 2022. 12. 31.

> 진행에 앞서

개발자로 취업을 꿈꾸고 있는 사람이라면, 많은 경우 이것부터 준비한다.

바로 코딩테스트이다.

비록 '코딩테스트 = 알고리즘 테스트'는 아니지만, 최소한 알고리즘에 대한 내용을 전혀 모른 상태에서 진행하는 것은 덧셈도 못하면서 곱셈에 도전하는 느낌이기에, 알고리즘은 어느새 많은 개발자들에게 부담아닌 부담으로 다가와 있는 상황이다.

그리고 그 알고리즘에 대한 기본기를 다지기 위해서는 자료구조를 잘 알아야 한다.

물론 고급언어 기준으로는 다양한 자료구조에 해당하는 클래스 및 함수를 제공하고 있기 때문에, 이런 부분에 대한 깊이 없이도 쉽게 처리할 수는 있지만, 어느정도 올라가다보면 한계에 부딪히게 된다. 기본기가 부족하기 때문에 발생하는 현상이라고 생각한다.

이에 대해 많은 개발자들이 잘 받아들일 수 있도록 고민한 책을 접하게 되었다.

 

> 책에 대한 간단한 정보

표지에서 눈에 띄는 것은 '이야기'이다.

이 책의 표지는 깔끔하지만, 인상적인 한 마디를 적어 두었다.

'위트 넘치는 이야기로 자칫 지루할 수 있는 자료구조+알고리즘 개념을 즐겁게 배운다.'

이 이야기가 전체의 맥을 잘 잡고 표현했다고 생각한다.

책 전체가 이야기를 전해주는 느낌을 주기 때문이다. 그래서 책을 읽는다기 보다는 책을 듣는다는 느낌에 좀 더 가까웠다.

직접 흐름을 잡아 끌어주기 때문에, 내 스스로의 포기 의지만 없다면 자연스럽게 하나씩 익히기 좋은 느낌이다.

 

 

> 인상깊은 부분들

저자의 강조점

저자는 머릿말에서 알고리즘이라는 것 자체가 모든 프로그래머에게 필요한 것이 아닐 수 있다고 이야기 한다. 하지만, '좋은' 프로그래머가 되기 위해서는 큰 보탬이 된다고 말한다. 즉, 프로그래머로 그냥 밥벌어 먹는 것 외에는 큰 비전이나 목표가 없는 사람이라면 애초에 관심이 없겠지만, 계속 성장하고 더 큰 일을 할 수 있으며, 높은 이상을 바라보는 프로그래머라면 자료구조와 알고리즘은 매우 중요한 요소임을 역설적으로 말하고 있다.

검증된 표준 라이브러리를 사용하는 것은 현대 프로그래머의 축복과도 같은 상황이지만, 그것을 연장통으로 볼 때, 그 연장통 안의 도구를 적절히 사용하려면 그것을 올바르게 알고 있어야 한다는 것도 말하고 있다. 참 설득력이 있다고 생각한다.

 

이 장의 학습 흐름을 장의 첫 쪽에 담아두었다.

매 장을 시작할 때면, 이 장의 학습흐름이 눈에 띄었다. 이것은 스택에 대한 장을 예시로 든 것인데, 스택을 익히기 위해서 다음의 흐름으로 말할 것이라는 예고편이다. 스택이 어떤 것인지 개요부터 시작하여, 가벼운 스택의 구현방법과 그 스택으로 계산기를 구현할 수 있다는 것을 알려준다. 다른 장도 대부분 마찬가지이지만 이 흐름이 그렇게 딱딱하게 느껴지지 않아서 좋았으며, 그만큼 많은 노력이 들어갔다는 점이 느껴졌다. 

 

설명방식의 예

앞서 살펴본 내용의 연장선이다. 스택에 대해서 설명한 내용인데, 이 내용을 설명할 때 그림을 적극 활용하였다. 이 그림이 아니었다면, 매우 추상적이었을 것이고, 애초에 자료구조에 대해 잘 이해하고 있던 사람이 다시 상기할 때는 상관없었을 것이다. 하지만, 그렇지 않았다면, 추상적인 설명은 이 책을 덮게 만들었을지도 모른다. 어떻게든 그림으로 잘 표현하려고 노력한 이와 같은 부분이 다른 부분에서 쉽게 찾아볼 수 있다.

스택을 이용한 연산에서는 당연하게도 많이 쓰이는 후위연산자 표기방법을 사용하여, 어떻게 연산을 수행할 수 있는지 보여준다. 스텝 바이 스텝의 형식으로 표현했기 때문에 누가봐도 크게 어렵지 않을 것이다.

 

책의 뒷표지

이 책에서 다루고 있는 내용을 나열식으로 기록한 것이 특징이다. 알고리즘 부분에서는 '분할 정복', '탐욕 알고리즘' 등 알고리즘 공부좀 해봤다면 한 번쯤은 들어봤을 법한 용어들을 알려주고 있다.

이 책은 이론에 관한 책이 많으나 실습으로 그것을 이해하는 데 도움을 주고 있다는 점 또한 말하고 있으며, 그것에 그치지 않고 응용을 할 수 있는 알고리즘의 내용까지 이어지고 있기 때문에 많은 사람이 이 책을 필요로 하고 있다는 점을 알려주는 듯한 느낌이 든다.

 

 

> 괜찮은 부분

  1. 알고리즘 공부를 할 때 원리부터 파악하도록 도움을 준다.
    각종 도표를 적극 활용하여 설명하려고 노력한 흔적이 많이 보인다. 특히 메모리를 블럭화하여 표현한 부분이 상당히 많은데, 그만큼 추상적으로 되어 있어서 이해하기 어려운 부분에 대해서 이해하기 쉽도록 도와주고 있다고 생각이 든다. 이를 테면, 초반에는 더블포인터에 대해서도 왜 사용해야만 하는지에 대해, 그렇지 않을 경우 어떤 문제가 발생하는지 알려주는 방식을 이용하여 모를만한 부분도 반드시 짚고 넘어갈 수 있도록 도와주고 있다.
  2. 자료구조 및 알고리즘 작성시 성능에 유리한 C를 채택하였다.
    요즘엔 많은 알고리즘 책이 파이썬 기반으로 되어있다. 물론 본인이 익숙한 언어를 사용하여 알고리즘을 작성하는 것은 필요하다고 생각하지만, 고급언어로 갈수록 상대적으로 성능이 떨어지기 마련이다. 그래서 가끔 성능을 최적화하지 못해서 주어진 조건을 통과하지 못하는 경우도 많은데, 이 책에서 소재로 사용하고 있는 C 언어에 익숙하도록 노력한다면 충분히 문제를 해결하는 데 도움이 될 것이라고 생각한다.
  3. 강의시 교재로 사용하기 좋은 분량이다.
    총 15개의 장으로 구성되어 있다. 그래서 개인이 강의 교재로 사용할 수도 있고, 그룹 스터디 교재로 사용하기에도 좋다. 약 반년 정도의 분량으로 적절해 보인다. 물론 대학 강의교재로 사용하기에도 적절해 보인다. 물론 난이도는 그렇게 낮지는 않으나, 그만큼 해당 기간을 적절히 분배하여 집중해서 공부한다면, 이 책은 좋은 길잡이가 될 것이다.

> 아쉬운 부분

  1. C를 처음 접하는 사람에게는 예제 실행이 어려울 수 있다.
    단순히 C언어에 대한 난이도 문제라기 보다는 C언어로 개발 했을 때 빌드 환경을 구성하는 방법 및 빌드 방법 등에 대해서 어려움을 겪을 수 있다. 이 책은 순수하게 자료구조 및 알고리즘에 집중했기 때문에, 별도로 C언어로 개발된 예제 프로그램을 어떻게 빌드하면 되는지 그 과정을 안내하고 있지는 않다. 물론 이 정도는 개인이 찾아보기 쉬운 부분이지만, 부록에서라도 간단하게라도 알려주면 좋았을 것 같다.
  2. 꼼꼼하게 보지 않는다면 예제코드는 어렵게 느껴질 수 있다.
    예제코드의 부분 수록이 아닌 전체 수록이 되어있다는 점에서는 매우 긍정적으로 생각한다. 그래서 실행할 수 있는 사람이라면, 이 코드를 정상 작성만 한다면 일단 결과를 보는 데에는 어렵지 않게 도달할 수 있다. 하지만, 예제코드를 라인별로 설명하는 주석이 있지는 않기 때문에 이해가 어려운 코드가 있을 수 있다고 생각한다. 이 부분을 앞에서 설명한 내용과 잘 맞춰보면 이해가 되겠지만 그만큼 꼼꼼히 되짚어봐야만 하는 시간 투자가 필요해진다.
  3. 연습문제에 대한 답을 제공하지는 않는다.
    물론 답이 한가지만 있지는 않기 때문에 자유도를 높이기 위해 그렇게 제공한 것일 수도 있고, 아니면 교수학습을 위해서 의도적으로 제거했을 수도 있다. 하지만 어느정도 가이드가 있다면, 본인이 풀어본 내용이 의도한 질문에 맞게 답을 한 것인지 파악하는 데 도움이 되지 않을까 하는 생각에 아쉬움은 들었다.

 

> 추천 독자

- 취업이나 이직을 앞두고 있는 개발자

- C언어에 대한 간단한 지식을 갖고 있으며, 그 기반으로 자료구조와 알고리즘 공부를 하고자 하는 개발자

- 사내 혹은 외부에서 자료구조와 알고리즘에 대한 스터디를 진행하고자 하는 개발자

- 코딩 테스트 공부를 진행하는 도중 최적화에 관심이 많고, 개발한 코드의 성능을 올리고자 하는 개발자

 

> 개인적인 평점

- 가격: 8 / 10

- 내용: 10 / 10

- 디자인: 8 / 10

- 구성: 9 / 10

 

> 정보

저자: 박상현

출판사: 한빛미디어

가격: 34,000원

전체 페이지: 644페이지

 

** 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

반응형

댓글