일부 개발자들과 알고리즘 대회 출전을 준비하는 분들에게만 필요한 것으로 여겨지던 알고리즘이, 면접과 이직시에 개발자들의 능력을 평가하기 위한 도구로 많은 회사에서 사용되는 분위기가 꽤 오랜시간 이어져 오고 있다. 책 제목에 "알고리즘 테스트 시대가 온다!", "프로그래머의 취업, 이작을 결정하는" 내용이 적혀 있는 것도 해당 트렌드를 반영한 것일 것이다.
책은 기본적인 알고리즘에 대한 의미, 측정방법등을 설명한 후에 바로 C언어를 이용한 자료형, 배열, 포인터등을 설명한다. 전반적으로 C언어를 이용하고 있기때문에, 예전 처럼 C언어를 기본으로 배우는 세대가 아닌 분들을 위해 다른 언어에도 있는 제어문이나 금방 익숙해질 부분은 생략하고 C언어에 익숙해지는데 필요한 자료형, 배열, 포인터를 설명하는 것이 지면의 낭비를 막은 것 같았다.
실제로 한 문제를 실행하는데 걸리는 실행시간과 사용하는 메모리를 제한하는 대회에서는 C언어나 C++을 주로 사용한다고 하니, 적절하다고 할 수 있다.
필수 자료구조인 링크드 리스트, 스택, 큐를 학습 한 뒤에 기본 자료구조의 개념을 이용해 트리를 살펴본다. 특별히 많은 용도로 사용되는 이진트리에 대해서는 부가적인 내용이 충실히 언급되어 있다.
가장 많이 나오는 정렬 알고리즘에는 선택, 삽입, 버블, 셸 정렬 알고리즘이 모두 설명되고 있고, 추가적으로 퀵정렬, 기수정렬, 병합정렬, 힙정렬까지 많이 언급되는 정렬 알고리즘은 모두 설명되고 있다는 생각이 들었다.
이진 검색 알고리즘과 해시 알고리즘을 마지막으로 알고리즘 문제를 해결하기 위한 기본기를 학습하는 것을 마무리 한다. 거의 책의 절반을 나눌때 앞에 언급한 기본기 학습 부분이 전반부이고, 후반부는 실제 문제를 통해서 알고리즘 문제를 푸는 감각과 능력을 키우도록 구성되어 있다.
몸풀기 알고리즘 문제는 정말 쉬운 코딩 문제들로 이루어져 있어서 알고리즘 문제에 대해 두려움이 있다면 조금은 날려버리는 시작이 될 수 있을 것이다.
그 이후 차근 차근 많은 알고리즘 문제를 다루는데, 대회에서도 많이 사용되는 탐욕법(Greedy),
분할 정복(Divide and Conquer), 동적 계획법, 백트래킹(Back tracking) 등을 익힐 수 있도록 골고루 문제가 배분되어 있고, 부록으로 Visual Studio 설치법을 알려주는 것으로 책은 마무리 된다.
이 책의 가장 큰 장점은 쉽다는 것이다. 단계별로 잘 구성되어 있고, 바로 결과를 확인 할 수 있는 짧은 예제들로 이루어져 있는 점이 장점이라고 할 수 있다.
책의 후반부에 몰려 있는 알고리즘 문제들의 해답들도 평균적으로 공백이나 Bracket만 있는 줄을 포함하고도 60~80줄이라서 따라서 입력하고 이해하는데 어려움이 없는 적절한 소스 크기로 구성되어 있다.
가장 마지막인 영역의 크기 문제와 식인종과 연구원 문제만 각각 110줄, 207줄이다.
면접이나 대회의 알고리즘 문제를 해결하기 위해서는 언어 하나는 정말 잘 다룰 수 있어야 하고, 연습이 많이 되어 있어야 하므로 책의 모든 소스가 한빛미디어 홈페이지에 59MB의 압축파일로 전부 올라와 있지만, 길지 않은 소스 이므로 직접 입력하면서 익숙해지는 것을 추천하고 싶다. 소스 중에 오탈자로 등록된 부분도 있으므로 홈페이지에서 미리 확인하면 시간을 절약할 수 있을 것이다.
책의 단점이자 아쉬운 점이라면, 앞에 시작할때 알고리즘의 평가를 초반에 설명을 하긴 하지만, 실제 알고리즘 문제풀이에서는 사용하는 메모리나 속도에 대해서는 큰 언급이 없다는 점이다.
실제 대회나 면접에서는 거의 실행 조건이 주어지기 때문에 해당 부분도 항상 언급하면서 문제 풀이과정에 보태졌더라면 더 좋았을 것이라는 생각이 든다.
또한 8개의 정렬을 소개하는데, 각각 대표되는 정렬들을 마지막에 표와 시각적으로 wrap-up할 수 있는 내용이 추가되면 정리가 더 잘될꺼 같다.
이 책은 전혀 프로그래밍을 모르는 분들이 보기에는 어렵지만, JAVA나 다른 프로그래밍 언어를 알 고 있는데 C로 알고리즘을 접근하고 싶다면, 이 책이 가장 쉬운 접근이 되지 않을까 생각한다.
본 서적을 다 읽은 후에는 더 많은 알고리즘 문제를 풀어 보고 싶은 생각이 들 것 같다.