[도서 리뷰] 다이내믹 프로그래밍 완전정복

안녕하세요, 괴짜 개발자 namedboy 입니다. 😎

여러분은 알고리즘을 공부할 때 어떻게 하시나요?
지난번 제가 포스팅 했던 게임으로 익히는 코딩 알고리즘 책에 나오는 코딩게임 같은 웹사이트도 좋고 예전부터 알고리즘 연습 사이트로 유명한 leetcode, codility도 좋다고 생각합니다.
예전에는 무조건 책을 보고 알고리즘을 연습해야 했는데 요즘은 다양한 방식으로 알고리즘을 풀어볼 수 있는 방법이 많이 있어 프로그램 개발을 처음 접하는 분들에게 좋은 접근방법이 될 수 있다고 생각이 드네요. 특히나 아직까지는 알고리즘 문제 해결 능력이 면접이나 코딩 테스트에서 많이 적용되고 있고 실제로 면접 전 코딩 테스트를 하는 회사도 많기 때문에 일종의 취직 준비단계에서 필요한 능력일지도 모르겠네요.
이러한 이유들 때문에 많은 분들이 알고리즘 문제 해결 능력을 키우고자 노력한다고 생각합니다. 그런 분들에게 저는 이 책을 추천하고 싶네요. 사실 상향식, 하향식 이런 문제풀이 방법에 대해서는 저도 잘 모릅니다.

10년이 넘도록 프로그램 개발을 해왔지만 알고리즘 영역보다는 다른 부분에 좀 더 치중했던 저의 경우는 문제풀이를 위한 알고리즘 문제 해결능력은 다른 분들보다 떨어진다고 생각합니다.

물론 업무적인 부분의 능력은 다르다고 생각하지만, 언젠가는 저도 필요한 순간이 올꺼라 생각합니다. 이 책은 그런 알고리즘 문제 해결 방법에 대한 책입니다. 그 중에서도 가장 이해하기 힘든 재귀호출의 영역에 대한 부분을 좀 더 집중적으로 다루고 있습니다.

상향식이든 하향식이든 무엇이 중요할까 라는 생각이 들긴 하지만 분명 두 부분 다 배우고 이해한다면 본인한테 맞는 방법을 찾을 수 있지 않을까하는 생각합니다. 일반적인 알고리즘 책이 그렇듯이 문제를 해결하는 과정에서 특별함은 없어보이지만 상향식 방법을 써서 재귀호출을 설명했다는 점이 다르다면 다른 부분이겠네요.
그리고 어떤 부분에서 좀 더 효율적인 알고리즘을 구성하는지 방법에 대한 설명이 있어 문제를 해결함에 있어 좀 더 효율적인 방법을 찾으려고 하는 분이라면 분명히 도움이 될 것입니다.

책을 전부 읽어보지는 못했지만, 어떤 상황에서 재귀호출을 쓰면 좋은지 그리고 그 중에 상향식은 어떤 면에서 좋은지를 착실하게 그리고 충분히 설명하고 있다는 생각이 많이 들었습니다.
프로그래밍 문제 해결에 대해 익숙하지 않고 어려워하는 분이라면 이러한 부분이 많은 도움이될꺼라는 생각이 많이 들었습니다. 사실 알고리즘 문제를 풀어내는 것 역시 현실의 문제를 해결하는 방법에 있어 크게 다르지 않습니다.

커다란 문제를 충분히 세분화 하고 충분히 세분화 되었다면 가장 빠른 문제 해결법을 사용해서 풀어내면 일반적인 문제는 거의 다 해결이 가능하다고 생각합니다. 그 중 가장 효율적으로 문제를 풀 수 있는 방법이 바로 기존에 만들어진 알고리즘 입니다.

알고리즘을 공부하고 싶은데 두꺼운 책을 읽기 힘든 분들에겐 다이나믹 프로그래밍 완전정복이 많은 도움이 되실꺼라 생각합니다.

꼼꼼히 보면서 여러번 연습한다면 분명 코딩 테스트에 더이상 두려워하지 않을 것입니다. :)