티스토리 뷰

Hobby/Book

[Book] TopCoder 알고리즘 트레이닝

생각많은 소심남 2013. 12. 25. 12:41



연구실에 TopCoder를 준비하는 친구가 있다. 그 친구말로는 알고리즘이야말로 사람간의 실력을 가늠할 수 있는 척도가 되고, 이걸 잘하는 사람이야말로 진정한 고수라고 했었다.  글로 정형화되어 있는 학술적인 내용과는 다르게 알고리즘은 상황에 따라서 자신이 응용해서 적용해야 하며, 그걸 통해서 답을 찾는 케이스다. 그렇기 때문에 한가지 주제라고 해도 답이 하나만 존재하는게 아니라 개개인의 특성에 맞춰진 다양한 답들이 나온다. 나도 이전에는 알고리즘에 대해서 배워야 할 필요성을 느끼고 있었던 터라 시간을 내고 조금씩 읽었던 책이다.


  이책을 한마디로 표현하자면 그냥 "문제집"이다. 어떤 알고리즘에 대해서 심도있게 분석하는 것이 아닌, TopCoder에 나왔던 기출문제를 토대로 문제 해결방향과 예시 답안을 제공하고 있는데 아마 책을 읽는 사람에 따라서 이 책은 독이 될 수도 있다. 개인적으로 생각하기엔 알고리즘을 학습하는 것은 독자가 스스로 고민해보고 그 방향을 직접 찾아가는데 의미가 있다고 보는데 이 책은 그 과정을 너무 쉽게 표현했다. 그리고 해당 챕터의 끝에는 C#, C++, Java로 구현된 답안이 제공되는데 아마 끈기가 없는 사람(나도 그런케이스?)은 쉽게 답안을 보고 "아 이 문제 쉽네!" 라고 오판하는 경우가 생긴다. 아마 코드 부분은 뒤로 별책화해서 빼놓으면 좋긴 했을텐데.. 아무튼 이 책을 읽고자 하는 사람은 꼭 스스로 문제를 풀어본다는 생각으로 읽으면 도움이 될만한 내용이 많이 들어있다.


 이 책의 장점으로 언급하고 싶은 점은 정말로 그림이 많다는 것이다.



아마 알고리즘의 궁극적인 목표는 얼마나 최적의 Complexity를 가지면서 답을 찾느냐 일텐데, 보통 Complexity란 개념이 적용되는 것은 내부적으로 Loop가 있는 경우에 나타난다. 즉, Loop내에서도 단계별로 어떤 값이 나오고 그 값을 정답을 구하기 위한 힌트로 적용하기 위해서는 그 상황에 대한 이해가 필요하다. 많은 사람들이 그 과정을 어려워 하는 이유는 그 단계가 매우 크고, 그 하나하나에 대한 상황이해가 너무 복잡하게 여기기 때문에 그런게 아닐까 생각한다. 그런데 이책은 적어도 책으로 표현할 수 있는 한도 내에서 단계별 그림 묘사가 잘 됬다고 생각한다. 물론 모든 과정을 옮기기는 힘들겠지만 적어도 센스가 있는 사람이라면 원리를 알 수 있게끔 표현되어 있어서 읽기에 재미도 있었고, 이해도 빨랐다.


참 나는 이책을 읽을때 즈음해서 edX에서 Introduction To Computer Science & Programming using Python 이라는 과목을 듣고 있었다. 특히 그 과목중에는 Memory and Search 라는 섹션이 있었는데, 그 부분에서 Search와 Sort에 관한 기초적인 내용이 나왔는데 그런걸 보다가 책을 보니까 "오 배웠던 내용이 나왔네" 해서 흥미있게 봤던 적이 있다. 



내가 하고 싶은 말은 어차피 알고리즘에서 어렵다고 여기는 문제들도 사실은 기초적인 알고리즘 내용에 기반해서 풀어나간다는 것이다. 그래서 이책도 서론에서 그런 이야기를 한다. 이책은 무언가 어려운 내용을 담고자 하는 것이 아닌, 수업에서 한번쯤 들어봤을만한 내용을 토대로 풀어나간다고 말이다. 그 부분은 유념을 하면 좋을 거 같다.


계속 방학때는 뭔가를 해봐야겠다는 생각을 하고 있었는데 이번 방학때는 이런 알고리즘을 통한 문제 해결능력을 키우는데 시간을 쓰지 않을까 싶다. 개인적으로 꼭 공부해보고 싶은 분야다.

댓글