다이내믹 프로그래밍 완전 정복
연구이야기/도서이야기☆

다이내믹 프로그래밍 완전 정복

2019년 10월에 출간된 <다이내믹 프로그래밍 완전 정복>에 대해 살펴보겠습니다. 출간한 지 얼마 되지 않은 신상입니다.

이 책의 저자는 미나크시(Meenakshi), 카말 라와트(Kamal Rawat)이며, 번역은 박상은 님께서 맡아주셨습니다.  개인적으로 이 책의 번역 품질은 만족스럽습니다. 

<다이내믹 프로그래밍 완전 정복>은 전에 리뷰했던 <파이썬 자료구조와 알고리즘>과 같이 작고 가벼워서 휴대하기 좋습니다. 물론 이 책의 내용을 휴대하며 스킴 방식으로 보는 것은 다소 이해하기 어렵겠지만, 반복해서 보기에는 좋을 것 같습니다.   

한빛미디어에서 기획하고 추진하는 한빛리더스 프로그램에 참여하며 작성한 글입니다. 

이 책에서 다루는 내용은?

<다이내믹 프로그래밍 완전 정복>의 처음 세 장은 재귀부터 시작하여 간단한 문제만을 다루고 있습니다. 기본 개념을 설명하고 독자가 쉽게 이해할 수 있도록 복잡한 부분을 과감히 배제하고 있습니다. 이후에는 조금씩 복잡한 문제를 다루고 마지막에는 실전 문제로 독자들이 다이내믹 프로그래밍을 이해했는지 평가할 수 있도록 구성되어 있습니다. 

이 책의 첫 번째 챕터는 재귀 호출에 관해 설명하고 있습니다. 재귀에 대한 기본 소개뿐만 아니라, 컴퓨터의 메모리 내부에서 재귀 호출이 어떻게 동작하는지 그림으로 충실하게 설명하고 있습니다. 컴퓨터에 익숙하지 않은 분들에게는 어려울 수 있는 내용이지만, 다이내믹 프로그래밍에 관심을 가질 만한 독자라면 반드시 이해하고 있어야 하는 내용이라고 생각합니다. 

두 번째 챕터는 재귀 호출에 대해 조금 더 나아갑니다. 피보나치 수열을 이용하여 재귀와 다이내믹 프로그래밍의 필요성을 언급한 후, 메모이제이션(이 책에서는 메모 전략이라고 함)을 설명하고 있습니다. 이 책에서 소개하는 메모이제이션에 대한 내용은 한 번 읽어봤으면 하는 챕터입니다.  

세 번째 챕터부터 다이내믹 프로그래밍의 세계로 들어갑니다. 재귀와 다이내믹 프로그래밍의 차이는 하향식 또는 상향식 접근 방법의 차이인데, 이 내용을 간단하면서도 명확하게 소개하고 있습니다. 일반적으로 상향식 접근 방법으로 문제를 풀이하는 것이 좋은데, 특정 상황에서는 하향식 접근 방법이 유리한 경우도 있습니다. 이런 상황을 설명하고, 실수할 수 있는 부분에 대해 주의사항을 안내합니다.

네 번째 챕터는 다이내믹 프로그래밍의 훈련을 돕기 위해 재미있는 문제들을 제시하고, 문제 풀이를 유도합니다. 이 문제들의 난도는 앞에서 살펴본 것보다는 높은 수준이지만, 지금까지 꼼꼼히 따라왔다면 충분히 풀 수 있는 문제들로 구성되어 있습니다. 직접 풀이해보면 다이내믹 프로그래밍에 한 걸은 다가갈 수 있을 것으로 생각합니다. 

마지막 챕터는 다이내믹 프로그래밍에 익숙해지도록 조금 더 어려운 문제들로 구성되어 있습니다. 실제 입사 문제의 난도로 구성된 문제들도 포함되어 실전 테스트라 생각하고 접근하면 좋을 것 같습니다. 만약 풀이하지 못하더라도 꾸준히 연습하고 다양한 방법으로 풀이해보면 큰 도움이 될 것으로 확신합니다. 

마치면서

<다이내믹 프로그래밍 완전 정복>은 네 개의 파트와 다섯 개의 챕터, 그리고 두 개의 부록으로 구성(약 220페이지 분량)되어 있습니다. 생각보다 매우 얇은 책이지만, 이 책의 품질은 나쁘지 않습니다. 간단명료하게 잘 설명된 개념 소개로 독자의 이해를 돕고 있으며, 문제를 해결하는 방법을 매력적으로 정리하고 있습니다. 

이 책은 프로그래밍에 재미를 붙이고, 다이내믹 프로그래밍에 대해 더 많은 경험을 하고 싶은 분에게 추천하고 싶습니다. 이 책은 재미있는 연습문제를 포함하고 있습니다. 이 문제의 풀이 방법을 생각하면 시간이 흐르는 줄 모르고 문제 풀이를 하는 모습을 발견할 수 있을 것입니다.

마지막으로 이 책은 C 언어를 기준으로 설명하고 있습니다. C 언어를 모르는 독자라면 이 책의 내용을 이해하기 어려울 수 있습니다. 이 책의 역자인 박상은 님은 우수한 번역 품질에 C 언어로 작성된 코드를 파이썬으로 재구현하여 코드를 제공합니다. 비록 파이썬으로 코드를 설명하지는 않지만, 파이썬을 이해하고 있는 독자라면 도움을 받을 수 있을 것입니다. C 언어가 생소한 독자들을 위해 파이썬으로 설명한 책도 출간했으면 하는 개인적인 바람이 있습니다.