콘텐츠로 이동

머리말

몇 년 전, 나는 리트코드에 『剑指 Offer』의 문제 풀이 시리즈를 공유했고 많은 독자의 격려와 지지를 받았다. 독자들과 이야기하면서 가장 자주 받은 질문은 “알고리즘 공부를 어떻게 시작하면 좋을까요?”였다. 점차 나는 이 질문에 깊은 관심을 갖게 되었다.

아무것도 모르는 상태에서 무작정 문제를 푸는 방식이 가장 인기 있는 방법인 듯하다. 간단하고 직접적이며 효과도 있다. 하지만 문제 풀이는 ‘지뢰 찾기’ 게임과 비슷하다. 스스로 공부하는 능력이 뛰어난 사람은 지뢰를 하나씩 무사히 제거하지만, 기초가 부족한 사람은 지뢰에 거듭 부딪혀 좌절하며 점점 물러서기 쉽다. 교재를 처음부터 끝까지 읽는 것도 흔한 방법이다. 그러나 취업을 준비하는 사람에게는 졸업 논문 작성, 이력서 제출, 필기시험과 면접 준비만으로도 대부분의 에너지가 소모되므로, 두꺼운 책을 파고드는 일이 큰 도전이 되곤 한다.

비슷한 어려움을 겪고 있다면, 이 책이 여러분을 ‘찾아온’ 것은 다행스러운 일이다. 이 책은 그 질문에 대한 나의 답이다. 최적의 답은 아닐지라도, 적어도 적극적인 시도는 될 것이다. 이 책만으로 곧바로 취업에 성공하기는 어렵겠지만, 자료 구조와 알고리즘의 ‘지식 지도’를 탐험하도록 안내하고 여러 ‘지뢰’의 모양, 크기, 분포를 알려 주며 다양한 ‘지뢰 제거 방법’을 익히도록 도울 것이다. 이러한 능력을 갖추면 문제를 풀고 문헌을 읽는 일이 한결 수월해지고, 차츰 완전한 지식 체계를 세울 수 있을 것이다.

나는 파인만 교수의 말에 깊이 공감한다. “지식은 공짜가 아니다. 주의를 기울여야 한다.” 이런 의미에서 이 책은 완전히 ‘무료’인 것은 아니다. 여러분이 이 책에 쏟는 소중한 ‘주의와 관심’을 헛되게 하지 않도록, 나 역시 최대한의 ‘주의와 관심’을 기울여 집필에 최선을 다하고자 한다.

내 학식과 재능이 부족함을 잘 알고 있다. 책의 내용을 한동안 다듬어 왔지만 여전히 많은 오류가 있을 것이다. 선생님과 학생 여러분의 비판과 지적을 부탁드린다.

Hello 알고리즘

Hello, 알고리즘!

컴퓨터의 등장은 세상을 크게 바꾸었다. 빠른 계산 능력과 뛰어난 프로그래밍 가능성을 갖춘 컴퓨터는 알고리즘을 실행하고 데이터를 처리하는 이상적인 수단이 되었다. 비디오 게임의 사실적인 화면, 자율 주행의 지능적인 판단, AlphaGo의 멋진 대국, ChatGPT의 자연스러운 상호작용까지, 이 모든 응용은 컴퓨터 위에서 알고리즘이 정교하게 구현된 결과다.

사실 컴퓨터가 등장하기 전부터 알고리즘과 자료 구조는 세상 곳곳에 존재했다. 초기의 알고리즘은 고대의 셈법이나 도구 제작 절차처럼 비교적 단순했다. 문명이 발전하면서 알고리즘도 점점 더 정교하고 복잡해졌다. 장인의 놀라운 솜씨에서 생산력을 높여 준 산업 제품에 이르기까지, 나아가 우주의 운행을 설명하는 과학 법칙에 이르기까지, 평범하거나 경이로운 거의 모든 것의 이면에는 정교한 알고리즘적 사고가 숨어 있다.

자료 구조 역시 어디에나 있다. 크게는 사회 관계망부터 작게는 지하철 노선까지 많은 시스템을 ‘그래프’로 모델링할 수 있다. 국가부터 가정에 이르기까지 사회의 주요 조직 형태는 ‘트리’의 특성을 보인다. 겨울옷은 ‘스택’과 같아서 가장 먼저 입은 옷을 가장 나중에 벗는다. 셔틀콕 통은 한쪽으로 넣고 다른 쪽으로 꺼낸다는 점에서 ‘큐’와 닮았다. 사전은 원하는 표제어를 빠르게 찾을 수 있다는 점에서 ‘해시 테이블’과 비슷하다.

이 책은 명확하고 이해하기 쉬운 애니메이션 그림과 실행 가능한 코드 예제를 통해 독자가 알고리즘과 자료 구조의 핵심 개념을 이해하고 직접 프로그래밍으로 구현할 수 있도록 돕는 것을 목표로 한다. 이를 바탕으로 복잡한 세상 속에서 알고리즘이 생생하게 드러나는 모습을 보여 주며 알고리즘의 아름다움을 전하고자 한다. 이 책이 여러분에게 도움이 되기를 바란다!

댓글로 의견이나 질문, 제안을 남겨 주세요