> 진행에 앞서
알고리즘 관련된 책을 몇 권 보았지만, 근래에 들어서는 오랫만에 접해보았다.
개인적으로는 다른 것들에 관심을 가지면서, 알고리즘은 많이 접하지 않았던터라, 많이 부족하다고 느끼고 있었기 때문에, 이 주제가 눈에 들어온 것 같다.
> 책에 대한 간단한 정보
제목처럼 알고리즘에 대한 책이다.
특히 순수한 자료구조를 중심으로 한 알고리즘 문제 해결에 대한 책이다.
코딩테스트를 비롯하여 다양한 사이트에 코딩관련 문제들이 많지만, 이 책은 컴퓨터공학을 전공한 사람이라면 알고있을 자료구조에 대한 내용을 다루고 있으며, 이것을 다시 상기시킴과 동시에 직접 구현하여 피부로 와 닿도록 도와주는 데 목적이 있다. 특히 구현에만 초점을 맞추었다기 보다는 그 풀이 과정 자체를 잘 설명해놓았다.
그리고, 알고리즘은 파이썬3를 통해 구현하였다.
> 인상깊은 부분들
당연히 여러 요소가 있었지만, 알고리즘 설계 캔버스를 중심으로 그 요소를 설명하고 있다는 것이 특징이었다.
마치, 우등생의 비법 노트를 보는 느낌이랄까.
그 비법 노트를 작성하는 방법 뿐 아니라, 그 과정에서 풀이 과정을 같이 학습해나가는 느낌마저 들게 하였다.
관련 문제를 그냥 풀어볼 수도 있지만, 그 문제를 제공하는 사이트를 직접 적어주어 풀어보기 쉽도록 하였다.
그래서, 해당 사이트에서 다른 언어로 문제를 풀어보는 것도 어렵지 않았다.
사이트에서는 다른 언어라고 하더라도 직접 실행 가능할 뿐 아니라, 오답까지 잘 체크해주기 때문이다.
문제를 직접 해결해보니, 정말 좋은 참조를 넣어놓았다는 생각이 더 강하게 들었다.
문제 해결방법에 대해 설명하는 부분에서는 도표를 매번 출연시켜서 설명하고 있다.
대학 때 알고리즘에 대한 이해를 돕기위해 칠판에서 자주 보았던 방식인데, 이러한 방식을 통해 스텝바이스텝으로 알고리즘에 대한 이해가 쉽게 되도록 도와주었다.
이 책의 핵심인 알고리즘 설계 캔버스를 중심으로 뒷 표지를 내세웠다. 책을 읽을수록 이유가 와 닿는 부분이다.
> 괜찮은 부분
1. 단계별로 문제해결을 설명하였다.
가장 먼저 문제 기술 및 설명을 하고 있다. 그리고나서 노트를 활용하여 문제 접근 및 풀이를 제공하며, 제한 사항 및 아이디어를 기록하고, 그것을 코드로 풀어내고 있다. 이러한 일련의 과정을 따라가다보면 당연히 문제해결은 이렇게 하는 방식이 좋다고 여겨지고, 이 방식대로 훈련하게 된다. 이 방식에도 동의하는 바이기 때문에 충분히 좋았던 부분이다.
2. 해당 문제를 비슷하게 제공하는 사이트를 알려줌으로 인해 직접 풀어볼 수 있는 기회를 제공한다.
한가지 사이트 뿐 아니라 다양한 사이트에 대한 참조를 링크로 제공함으로, 직접 실습하는 데 도움을 주었다. 아니었다면, 그냥 머릿속으로 이해만 하고 넘어갔을 문제들을 직접 풀 수 있도록 도전해보도록 했다는 것이다. 개인적으로도 leetcode를 이용하여 문제를 풀어보았는데, 여기서 말하는 풀이를 볼 때도 있었지만, 먼저 문제를 풀어보고 이 해설을 보았을때 더 와 닿았던 부분이다.
3. 배열, 문자열, 연결리스트, 스택, 재귀 등 필수 주제를 다뤄주었다.
너무 뻔한 주제들이고, 요즘에는 API로 제공되기 때문에 아마도 개발자들이라면 직접 구현할 일이 없는 알고리즘일지도 모른다. 그래서 오히려 개념은 알고있지만, 직접 구현하라고 하면 구현하기는 어려울 수 있는 주제들인데, 이에대한 이해를 높이기 위해서는 구현하는 방법을 알고있어야 한다고 생각한다. 그런 관점에서 이러한 개념을 활용한 문제를 다룬것이 좋았으며, 순수한 구현 뿐 아니라, 응용 문제를 다룸으로써 실용적이기까지 하다.
4. 그림/도표를 적절히 삽입하여 이해를 돕고 있다.
그림/도표를 필요하다고 생각되는 곳 마다 잘 삽입하였다. 배열의 구조를 다룰 때에도 몇 번째 배열에 어떤 값이 들어갔으며, 해당 루프를 수행할 때마다 어떤 변화가 일어나는지도 알려주고 있다. IP주소에 관한 문제에 대해서 다룰 땐, 각 주소 값의 범위를 기재한 부분도 있었다. 이렇듯 이해를 도울 수 있도록 최대한 그림/도표를 적절히 활용한 부분이 인상적이었다.
> 아쉬운 부분
1. 실제로 문제를 풀어볼 수 있는 참고 사이트를 나중에 보여주어 아쉽다.
스텝바이스텝으로 문제 해결을 해나가도록 돕고 있다고 하였는데, 참고 사이트는 마지막에 언급되어있다. 이 문제를 스스로 풀어보고 그 다음에 설명을 들으면 좀 더 강하게 와 닿는다고 생각되는 측면에서는 순서가 굳이 뒤에 있었어야만 했나 하는 생각이 들었다. 계속 뒤부터 확인하느라 아쉬웠다.
2. 이해를 돕기 위한 서술이 많은 편인데, 단락을 적절히 끊어주면 가독성이 올라갈 것 같다.
도표를 많이 삽입했으나, 특성상 서술하는 부분도 많았다. 그래서 어떤 부분은 10줄이 넘도록 설명이 이어지는 단락도 존재한다. 그래서 이렇게 말이 길어지는 경우 적절하게 단락이나 항목을 끊어서 알려준다면, 가독성이 올라가고 이해도 쉽게 할 수 있지 않았을까 생각되었다.
3. 알고리즘 설계 캔버스에서 테스트 칸은 사용하지 않았다.
알고리즘 설계 캔버스라는 테이블은 이 책에서 가장 핵심적인 노트를 표현하는 부분이다. 이 부분에 각각의 칸이 다른 역할을 보여주고 있는데, 이 중 테스트 칸은 별도로 기록에 사용된 것을 보지는 못했다. 그렇다면 굳이 필요한가 생각이 들고, 필요하다면 활용하는 부분도 같이 보여주어야 납득할 수 있을 것 같다.
> 개인적인 평점
- 가격: 7 / 10
- 내용: 8 / 10
- 디자인: 8 / 10
- 구성: 8 / 10
> 정보
저자: 윤대석
출판사: 한빛미디어
가격: 26,000원
전체 페이지: 387페이지
** 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.
'[Review] > Book' 카테고리의 다른 글
[도서 리뷰] 텐서플로를 활용한 머신러닝 (0) | 2021.07.25 |
---|---|
[도서 리뷰] NGINX 쿡북 (0) | 2021.06.20 |
[도서 리뷰] 러닝 SQL(Learning SQL) (0) | 2021.04.18 |
[도서 리뷰] 처음 배우는 리액트 네이티브 (0) | 2021.03.21 |
[도서 리뷰] Do It! 플러터 앱 프로그래밍 (0) | 2021.03.03 |
댓글