-
-
TopCoder 탑코더 알고리즘 트레이닝
타카하시 나오히로 지음, 윤인성 옮김 / 한빛미디어 / 2013년 11월
평점 :
절판
요사이 많은 앱, 웹 공모전과 해커톤등이 있지만, 개발자로서 오롯이 개발 능력만으로 승부를 할 수 있는 대회에서 좋은 성적을 거두는 것을 더 큰 영광으로, 성공으로, 더 값진 것으로 생각하는 이들이 있으리라 생각한다. 최소한, 나는 그렇게 생각을 하고 있으니 나와 같은 사람이 있지 않을까?
그런 내게 탑코더는 초능력자들만이 존재한다고 생각하는, 마치 그리스 로마 신화의 최고 12신들이 있는 올림포스 산 정상의 판테온 같은 곳이었다.
차마 참가해볼 생각도 하지 못했던 곳이지만 이 책을 보고 처음 계정을 만들었고, 이제 이 책을 바탕으로 차근차근 연습한 후, 도전을 해야겠다는 마음이 들었다.
이 책의 구성은 탑코더 등록방법과 프로그래밍 기초 내용을 소개한 후, 초급, 중급, 상급의 실제 알고리즘 문제 풀이 과정으로 되어있다.
실제 알고리즘 문제들을 제시하고 그 문제에 대한 해석, 접근방법을 언급한 후 해결 과정과 실제 소스를 C#, Java, C++의 언어로 보여준다.
처음 문제가 너무 낯설어 문제만 봐서는 도통 감을 잡지 못하다가, 입력된 예시와 그의 결과를 보면 바로 감을 잡을 수 있었는데, 초반에는 전체탐색이라고 정의한 전부 for문을 이용해서 loop를 이용하는 방법을 이용하면 수학적 지식 없이도 거의 모든 문제의 해결이 가능했다.
하지만 중급에서 프로그램의 실행 시간과 메모리 사용량이 있는 실제 탑코더의 환경을 언급하고 실행시간과 메모리 사용에 대해서 신경을 쓰게 된다.
이를 위해 '한 번 계산한 것은 두 번 계산하지 않는다.', '하지 않아도 되는 계산은 처음부터 하지 말자.', '탐색 범위를 좁히자'의 3가지 핵심 방법을 제시하고 중요한 내용답게 많은 분량을 할애하여 설명한다.
마지막인 상급이 되면 상당히 어려운 문제가 나오지만 지금까지 배운 알고리즘, 전체 탐색, 처리를 정하고 범위를 한정하는 것 등을 조합하면 반드시 풀 수 있기에 바로 답을 보고 싶은 마음을 참으며 여러 가지 방법을 깊게 생각하고 시도해 보는 것이 좋은 학습이 될 것이다.
이 책에서 초반에 가장 강조하는 것은 프로그래밍과 관련된 기초 지식이 아니라 오히려 자신감, 도전정신을 갖는 것이다. 그러다 보니 자기계발서에서 볼 수 있는 듯한 구절들도 많이 보이지만, 어는 곳에서나 통용될 만한 진리임에는 틀림없는 것 같다.
수학적 지식과 어려운 알고리즘을 알아야 풀 수 있다는 생각은 이제 버려주세요.
Division 1 에서 높은 수준의 문제가 아니라면 특별한 지식이 없어도 풀 수 있습니다.
"어떻게든 당연히 풀 수 있어!"라고 생각하는 것이 프로그래밍 대회 공략의 첫걸음입니다. - p78
그리고 그 다음에 필요한 것은 많은 문제에 도전하고, 풀어보는 노력으로 보인다. 아래와 같이 책에서 언급했다 싶이 한 번에 문제를 풀 수는 없을 것이다. 당연히 많은 실패를 겪게 되니 좌절하지 말고, 조금 더 생각하고, 도전해봐야 할 것이다.
만약 실수했어도 실망하지 말고 실수의 원인을 분석해보세요.
실수를 반복하지 않도록 연습하면 이러한 수준의 문제는 쉽게 풀 수 있을 것입니다. - p78
실패를 겪다 보면 금세 계산량의 개념이 익혀질 것입니다. - p201
분명히 말하지만 법칙을 발견하는 정석 같은 방법은 없습니다.
가능한 많은 문제를 풀어보는 방법밖에 없습니다. - p333
책의 내용은 대체로 만족스러웠지만 초반의 프로그래밍 기초는 실제 어느 정도 지식을 갖춘 사람에게는 의미가 없고, 전혀 모르는 초심자에게는 그리 쉬운 설명은 아니기에 큰 도움이 되지 않을 것 같다는 생각이 들었다.
마지막 장에서 소수, 최대공약수 최소공배수의 간단한 수학적 지식을 언급하고 있는데 이 부분이 프로그래밍 기초에 이어나오는 것이 좀 더 어울리지 않을까 하는 생각이 들었다.
또한, 이 책에는 C#, Java, C++ 의 언어들이 언급되기에, 이 점이 장점이자 한 언어만 사용하는 대부분의 개발자에게는 책을 보는 흐름을 해치는데 한 언어에만 집중에서 여러 언어 버전으로 나와도 괜찮을 것이라는 생각이 들었다.
하지만 위와 같은 의견은 개인적인 의견이기에, 전체적으로 보기 좋은 책이라는 생각이다.