2022년 9월에 출간된 푸둥라이 님의 <코딩 인터뷰를 위한 알고리즘 치트시트>를 소개합니다. 이 책의 부제는 <리트코드(LeetCode) 문제를 풀면서 배우는 코딩 테스트>입니다. 이 책은 10만 개의 깃허브 스타를 받은 검증된 알고리즘 강좌로 엄선한 75가지 리트코드 알고리즘 문제를 해결하며 알고리즘 풀이 방법을 안내합니다.
필자에게 제이펍 출판사에서 이메일을 보내주셨습니다. 연구실 학생들에게 도움이 될 것으므로 판단하고 응모했는데, 다행히도 출판사에서 선정해 주셔서 이 책을 리뷰할 기회를 얻게 되었습니다. 이 책을 리뷰하는 데 도움을 주신 제이펍 관계자님께 깊은 감사의 말씀을 전합니다.
<코딩 인터뷰를 위한 알고리즘 치트시트>는 약 460페이지로 구성되어 있습니다. 휴대하면서 읽기는 적당하다고 생각됩니다만, 직접 컴퓨터로 실습해보고 개인적으로 많은 연구를 하면서 봐야 하므로 전자책보다는 책으로 보는 것이 더 좋을 것 같습니다.
제이펍 전문서 리뷰어에 참가하여 작성한 글이며, 제이펍에서 제공해준 책을 읽고 작성했음을 밝힙니다.
이 책의 매력은?
이 책은 다른 책과 다르게 0장으로 시작합니다. 이 책은 다른 책과 다르게 하나의 프로그래밍 언어를 다루지 않고, 많이 사용한다고 판단한 세 가지 언어(파이썬, C++, 자바)를 혼합해서 사용합니다. 0장에서는 이 책을 읽기 위해 필요한 세 가지 언어의 기본 문법을 소개하고 있습니다. 저는 이 부분이 긍정적으로 다가왔습니다. 하나의 문제를 풀이할 때, 언어의 특성을 반영하여 문제를 풀이할 수 있는 시각을 넓힐 수 있기 때문입니다. 다만, 이 책은 언어별 특성을 최소화하여 풀이하는 과정을 담았기 때문에 독자가 확장할 수 있는 여지도 남겨뒀습니다.
이 책은 이후에 알고리즘 학습과 문제 해결 아이디어라는 절을 시작으로 동적 계획법, 역추적 알고리즘 문제 해결법, 너비 우선 탐색(BFS), 투 포인트, 슬라이딩 윈도 등을 소개하고 문제 해결 방법을 간략히 소개합니다. 2장에서는 동적 계획법을 자세하게 다룹니다. 동적 계획법을 소개하고 다양한 문제를 풀이하는 과정을 통해 동적 계획법의 문제 해결 방법을 자연스럽게 학습하도록 구성되어 있습니다.
3장은 다양한 데이터 구조를 다룹니다. 이진 트리, 스택, 큐, 연결 리스트 등을 다룹니다. 4장은 백트래킹 알고리즘과, BFS 알고리즘 등을 자세히 다루고 있습니다. 마지막으로 5장은 면접에 자주 나오는 문제를 제목으로 면접에서 주로 출제되는 성향의 문제를 선정하여 해결 방법을 안내합니다.
이 책의 구성 방법은 마음에 듭니다. 우선 문제를 분석하는 방법부터 소개합니다. 문제를 읽고, 추상화하는 과정을 보여주고 있어 이 부분에 어려움을 느끼는 사람들에게 간접적으로 체험할 기회를 줍니다(실제 연구실 학생들이 문제를 풀이할 때, 이 부분을 어려워하는 친구들을 많이 봤었습니다). 그리고 문제 풀이하는 과정을 하나씩 밟아나가는데, 이 과정에서 독자의 이해를 돕기 위해 다양한 시각적 도구를 활용하여 설명하고 있어 쉽게 이해할 수 있었습니다.
저자가 이 책을 쓰면서 많은 시간을 투자했을 것 같습니다. 이 책에서 저자가 선정한 문제들도 괜찮았고, 10만 개의 깃허브 스타를 받은 이유를 알 것 같기도 합니다. 책을 읽다 보면, 이 책을 쓰기 위해 노력한 결과들이 여러 곳에 묻어납니다. 아마도 이 책의 저자가 독자에게 하고 싶었던 이야기는 "이 책을 읽으면서 여러분들도 자신만의 생각과 풀이 방법을 정리해 보세요." 일 것 같습니다.
개인적으로 코딩 인터뷰에 합격하기 위한 목적으로 이 책을 보는 것보다 자료구조와 알고리즘을 학습하고, 리트코드 등의 사이트에서 제공하는 문제를 풀이한 이후 이 책을 보는 것이 더 좋은 학습 방법일 것 같습니다. 자신만의 풀이법을 찾고, 정리한 이후 이 책을 상호보완 교재로 사용한다면 더 많은 것을 얻을 수 있을 것으로 생각합니다.
마치면서...
필자는 이런 식의 책을 좋아하지는 않습니다. 주어진 문제를 읽고, 해석하고 자신만의 풀이법을 만드는 것이 훨씬 더 개발자로서 잘 성장할 수 있다고 믿습니다. 직접 문제를 풀이한 이후 다른 사람의 해결 방법과 비교하며 부족한 부분이 무엇인지 파악하고 보완하는 것이 더 올바른 과정이라고 생각합니다. 다만, 이 책을 통해 주어진 문제를 분석하고, 추상화하는 방법과 문제를 풀이하는 과정뿐만 아니라 해결 방법의 정리 방법 등을 배울 수 있었습니다.
코딩 인터뷰를 위해 이 책을 보는 것보다는 자신만의 코딩 색을 찾고, 정리하는 과정에서 이 책을 본다면 더 도움이 될 것 같습니다. 자신만의 문제 해결 패턴을 만든 후, 이 책과 비교해서 장/단점을 파악하고 자신만의 풀이법을 개선한다면 그 과정에서 훨씬 더 많이 배울 수 있을 것으로 생각합니다.