|
나쁘지는 않다. |
|
처음 알고리즘을 접한 것은 개발자로써 어딘가 막혀있을 때였습니다. 어떤 함수를 쓸지 비교하면서 코드최적화를해오고는 했었는데 더이상 발전되지 않는다는 느낌이 들고 자만심마저 들고 있었을 때 알고리즘을 배우게 되었습니다. 그 때 수많은 자괴감을 느낌과 동시에 저의 코드실력은 향상되고 코드의 로직을 좀 더 효율적으로 작성할 수 있었습니다. 하지만 처음 제가 알고리즘을 공부할 땐 정말 너무나도 힘들었습니다. 무언가 제게 방향을 가르쳐 줄 사람도 책도 없었습니다. 이 책은 그 때의 제가 필요했던 "방향"을 너무나 잘 잡아 줍니다. 처음 알고리즘을 접하는 사람은 보기에는 어려울 수도 있지만 이 책을 곁에 두면서 스스로 알고리즘 문제를 풀어 나가면 이 책의 진가를 알 수 있을 것입니다. 초급자와 중급자가 느끼기에는 다음과 같을 수 있을 거같아 적어봅니다. - 초급자 : 다소 어려울 수도 있지만 스스로 문제를 풀어보시면서 하면 충분히 소화낼 수 있습니다. 11장을 모두 다 이해하시고 12장을 학습하는 것을 권장합니다. - 중급자 : 11장까지는 복습하는 느낌, 그리고 12장부터는 고난도 주제를 땀흘려가면서 이해하면 됩니다 한줄평 코딩테스트나 프로그래밍 대회를 나간다면 옆에 두며 공부하길 추천드립니다! 알고리즘은 정답을 알려주는 것보다 힌트를 통해 스스로 구현하는 것이 중요한데 이 책은 그 힌트에 집중하고 있습니다. 군더더기 없는 깔끔한 설명으로 쪽집게 선생님이 옆에 있는 듯한 느낌을 주며 부족한 부분, 새롭게 배우는 부분을 요약해서 알려주며 이정표같은 역할을 합니다. 목차 목차는 다음과 같습니다. 대회, 코딩테스트에 나오는 모든 알고리즘을 집약해서 설명해주는 느낌입니다. 1장 들어가며 2장 프로그래밍 기법 3장 효율성 4장 정렬과 탐색 5장 자료 구조 6장 동적 계획법 7장 그래프 알고리즘 8장 알고리즘 설계 기법 9장 구간 질의 10장 트리 알고리즘 11장 수학 12장 고급 그래프 알고리즘 13장 기하 14장 문자열 알고리즘 15장 고난도 주제 12장부터는 어렵습니다. 알고리즘 대회를 준비하다보면 "센트로이드 디컴포지션, 가우스 소거법, lazy sagment" 등의 고난도 주제를 학습하게 되는데 이는 사실 구글링해서 얻기 힘든 지식들입니다. 하지만 이 지식들을 이 책에서는 쉽게 찾아서 볼 수 있습니다. 총 장수는 335쪽 정도 됩니다. 3주이상을 잡고 읽는 것을 추천드립니다. 마음에 드는 부분과 구절 1. 로직 중심의 간결한 코드
정말 중심적인 로직만 간결하고 깔끔한 코드를 보여줍니다. 2. 방향을 이끌며 물음표를 던지는 글. "모든 순열을 살펴보는 것은 효율적이 않지만 모든 부분집합을 살펴보는 것은 효율적일 수 있다. 예를 들어 ... 운행해야 하는가?" 이런식으로 독자에게 질문을 던져 생각하게끔 만듭니다. 3. 깔끔한 설명 "push_back, pop_back함수는 평균 O(1)시간에 동작하도록 구현되어있다. " 라는 글처럼 어떠한 함수, 어떠한 자료구조가 어떠한 시간복잡도를 가지고 있는지 빠짐없이 설명합니다. 또한, "반복자는 자료구조의 원소를 가리키는 변수" 라는 말처럼 어려운 Iterator의 개념을 처음 C++을 접하는 사람이라도 알 수 있을 정도로 쉽게 설명합니다. 많이 사용하는 정렬의 경우 이렇게 comp를 정해 놓으면 커스터마이징하게 정렬이 가능하다는 것을 보여줍니다. 정말 빠짐없이 알려줍니다. 리뷰를 마치며. 알고리즘은 모든 프로그래머에게 필수입니다. 처음 공부할 때는 정말 그만두고 싶지만 공부를 해나가면 실력은 발전하고 애플리케이션의 성능도 올라갈 것입니다. 하지만 모든 일이 그러하듯 방향이 중요합니다. 이 책은 발전하는 그 과정 옆에서 방향을 잡아주는 이정표역할을 해줄 것입니다. |