이책에서다루는내용
-체스게임을하는최적의방법과책을번역하는최적의방법을찾기위한너비우선검색알고리듬
-미로를빠져나갈수있는생쥐의수또는두위치사이의가장빠른경로의수를결정하는다익스트라알고리듬
-소셜네트워크의연결여부또는친구여부를결정하기위한유니온-파인드데이터구조
-매장판촉에서제공되는금액을결정하기위한힙데이터구조
-눈송이가고유한지여부를확인하거나사전에서복합어를식별하기위한해시테이블데이터구조
이책의대상독자
난이도높은문제를해결하는학습법을배우려는모든프로그래머를위한책이다.이책을통해다양한데이터구조와알고리듬,문제풀이에도움이되는유형및구현방법을배울수있다.이책의코드는전부C언어로작성됐으나C언어의기초는다루지는않는다.독자가C/C++에익숙하다면바로시작하는데어려움이없을것이다.그외에자바나파이썬등다른언어로프로그래밍한경험이있다면대부분의내용은읽으면서대략이해할수있을것이다.그래도1장을시작하기전에C언어의개요를복습한다면좀더도움이될것이다.특히,포인터와동적메모리할당에대해서는기존의프로그래밍경험에관계없이숙지해둘필요가있다.독자에게추천하는C언어책은K.N.킹의『CProgramming:AModernAccess,2ndEdition』(W.W.Norton&Company,2008)으로,C언어에익숙한사람에게도참고용으로서유용한책이다.
저자의말
기획단계에서최신의멋진알고리듬을설명하고기존의기법들과비교하는구성도고민했었다.설명을위주로하고실제알고리듬문제를접하지않으면금방기억에서잊힌다는단점을떠올릴수밖에없었다.이책은알고리듬기법을먼저설명하지않고,문제를먼저제시하는방식을사용한다.게다가제시되는문제도상당히어려워서기존의방법으로는쉽게풀수없다.즉,독자들이어려운문제를접하면서이미알고있는경험과문제해결에필요한지식을연결시키는방식으로기술을습득할수있다.아마도기존의교과서에서봤던문제는찾을수없을것이다.행렬을곱하거나피보나치수열을계산하는최적방법에대한내용도없다.또한,하노이탑문제를풀일도없을거라고장담한다.다른많은훌륭한교과서들이이런문제를다루고있는것이현실이지만,과연그런종류의문제에흥미를느끼는지는의문이다.
오히려독자들이접해보지못한새로운문제를활용하려고한다.해마다수천명의사람들이프로그래밍경진대회에참가한다.대회를준비하는주최측은참가자들이기존답안을다시쓰거나구글검색만이용해서풀수없도록새로운문제를준비한다.새로운문제는기존의문제를새로운상황에맞도록변형하며,참가자들이새로운해법을찾아내도록도전하고흥미를유발한다.이런문제를푸는데필요한프로그래밍과컴퓨터지식은끝이없다.제대로된문제를고를수만있다면실컷배울수있다.가장기초적인정의를떠올려보자.자료구조,즉데이터구조란데이터를구조화해연산을빠르게하는방법을말한다.알고리듬은문제해결방법을순서대로나열한것이다.가끔은정교한데이터구조없이도빠른알고리듬을만들어낼수있다.그러나올바른데이터구조를사용한다면알고리듬의속도를획기적으로향상시킬수있다.
이책을열심히공부하면실력있는프로그래머가될수는있지만,그것이필자의목표는아니다.프로그래밍경진대회의문제풀이를통해데이터구조와알고리듬을재미있게가르치고배우는것을마음에두고썼다.이책에서배울만한것이나,재미난것을찾았다면소감을이메일로보내주길바란다.