티스토리 뷰

언젠가 내가 도서리뷰라는 카테고리를 만들고,

'야, 이건 진짜 잘 썼다'싶은 책들을 리뷰하는 때가오면

이 책은 꼭 리뷰를 쓰고싶었다.

 

그래서 쓰는 오늘의 리뷰,

프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략.

 

내 낡은 책장 한 켠, 오래된 도서 2권


사실 이 책은 이미 너무 유명하다.

굳이 리뷰해야 싶을까? 정도로 이 쪽 업계에선 정평이 난 책이기도하고

알고리즘을 공부하는 사람들...특히나 최근 개발자 취업에 필수 코스라고 불리는 코딩테스트를 준비하는 이들이라면 누구나 다들 한 번은 이 책의 명성을 들어봤을 것이다. 

 

내가 이 책을 처음 접한 건 한창 알고리즘에 빠져살던 대학교 4학년...

그러니까, 지금의 코딩테스트 광풍이 몰아치기도 이전이었던 2013년이었다.

(라떼는 말이야, 썰을 풀자면...내가 이 책을 공부할때만해도 윗 사진의 가장 우측에 있는 해답 서적같은 건 없었다...책의 연습문제를 정말 쌩으로 다 풀어야했는데...세상 참 좋아졌어, 허허)

 

실제로 내가 가지고 있는 건 그 옛날의 2판이다.

컴퓨터 공학을 전공하면서, 내가 제일 재미를 느꼈던 분야는 알고리즘이었다.

 

문제가 제시되고,

그 해법을 찾기위해 이렇게 저렇게 그렇게 요렇게

머릿속으로 수십번 시뮬레이션하며 로직을 바꿔보고

놓친 값의 바운더리는 없는지 꼼꼼히 따져보고

그렇게 했는데도 Fail 이 뜨면, 다시 검토해보고.

 

코드는 거짓말을 하지 않는다.

코드는 갈아엎을수록 깔끔해진다.

 

이 2가지 개발지론이 정립 된 것도,

숱한 알고리즘 문제를 풀며 나도 모르는 사이에 체감되었기 때문이다.

 

그랬던 나이기에 알고리즘을 바탕으로 문제를 푼다는 것은 너무 재밌는 놀이였고

실제로 당시 넥슨에서 주최하는 대학생 알고리즘 경연대회인 NOS나

한국정보과학진흥협회(KISE)에서 주관한 알고리즘 경진대회에 참가했던 건

내가 과연 동년배들 중에서 어느 정도 레벨인지 가늠해보기 위함이기도했지만,

무엇보다 알고리즘을 풀어내는 게 재밌기 때문이기도 했다.

 

NOS 시상식...수상은 못 했지만 정말 재밌었다.

...오늘도 리뷰보단 잡설이 좀 길어지는 거 같으니,

본론으로 돌아와서.

 

우선, 내가 이 책을 선택하게 된 계기는 문제 풀(pool)때문이었다.

 

지금이야 백준, Leetcode, 프로그래머스등 알고리즘 관련 문제 사이트가 널리고 널렸지만

당시까지만해도 알고리즘 문제를 구하려면 실제 정보 올림피아드 사이트에 접속해서 한글파일(hwp)로 올려져있던 기출문제를 직접 다운받아서 풀어야했고, 그 문제를 푼다고하더라도 제공되는 테스트 케이스가 없기때문에 스스로 직접 검산해서 유추해내는 수 밖에 없었다.

 

그러던 와중에 무려 '프로그래밍 대회에서 배우는'이라는 슬로건을 내건 책이라니...

이 얼마나 기쁘고도, 긴 장마 끝에 해뜰날을 맞이하는 기분이 아닐 수 있겠는가.

 

만약 누가 내게 이 책을 알고리즘 책인가요? 라는 질문을 한다면, 나는 알고리즘 책은 아니라고 답을 할 것이다. 이 책은 알고리즘들에 대해서 설명하기보다는, 알고리즘을 필두로 문제를 풀어내는 방법을 설명한 책이라고 할 수 있다. 그러니까 비유하자면, 수학과를 전공한 사람과 수학교육과를 전공한 사람의 차이랄까.

 

수학과는 좀 더 깊이있는 순수 학문을 공부함으로써 본질을 쫓는 느낌이라면

수학교육과는 어떻게해야 수학을 쉽게 사람들한테 설명할 수 있는지를 아는 느낌이니까.

 

그렇기에 이 책은 올림피아드나 기타 대회에서 실제로 기출된 문제가 중심이고

그 문제를 풀기위해서 우리는 어떻게 접근해야하는지, 어떤 방향성으로 바라봐야하는지를

읽는이가 쉽게 이해할 수 있게 길고 긴 글로써 풀어서 설명을 해놓았다.

 

그래서 우리는 소설의 스토리라인을 따라 읽듯,

저자의 글을 따라가기만 하면 왜 여기서 이런 방식으로 접근했는지를 쉽게 깨달을 수 있다.

 

그 옛날 필기의 흔적

물론, 내가 이 책을 제대로 팠던 것도 이미 몇년전의 일이고,

코딩 테스트 광풍이라 불리는 요즘 시기엔 더 좋은 책이 나와있을 수도 있다.

다만 이 책은, 앞서 말한 것과 같이 내가 도서 리뷰를 한다면 무조건 해야지, 하고 마음먹게 만들만큼 잘 쓰여진 책이고 최소한 내가 알고있는 알고리즘 도서 중에서는 원탑이기 때문이다.

 

실제로 2015년경, 우리 회사는 SW 검정이라는 이름으로 알고리즘 등급제도를 도입했고

당시에 나는 모든 선배님들한테 이 책을 추천하며 이것만 보면 되신다고 말씀드리기도했다.

(이제와서 생각해보니, 닭 잡는 일에 소 잡는 칼을 추천한 격이긴하다)

 

장점과 추천이유만 적으면 섭하니 단점도 좀 적어보자.

내가 이 책을 보며 유일하게 느꼈던 단점은 책의 순서다.

 

이 책은 총 2권으로 이루어져는데(해답서적 제외)

굳이 분류해보자면 1권은 알고리즘, 2권은 자료구조다.

 

1권은 시간복잡도부터 설명하는데

2권은 기초 자료구조부터 시작한다.

 

컴퓨터공학, 혹은 이쪽 계열을 전공한 사람이라면 이 순서에 왜 의문이 드는지 알것이다.

자료구조를 배우지 않았는데 알고리즘을 공부한다?

물론, 알고리즘을 깨우치면 자료구조는 자연스레 따라오기 마련이지만...

 

우리가 시스템 구축을 건물 짓는 것에 비유해보자면

알고리즘은 건물을 어떻게 세우는 방식에 대한 로직을 구축하는거고

자료구조는 그 건물을 세우기 위한 주춧돌, 기둥, 기왓장같은 기본 원료들이기때문에

자료구조를 모르는 상태로는 알고리즘을 제대로 깨우칠 수가 없다.

 

그래서 흔히 전공을 공부할 때도 자료구조를 배운 후에 알고리즘으로 넘어간다.

그런데 이 책은 그 순서를 역행하고있다.

 

실제로 나도 주변에 이 책을 추천해줄때면 2권부터 사고 1권을 나중에 사는게 좋다, 라고 말을 하는 편이다. 그리고 2권부터 읽더라도 내용을 이해하는데는 아무런 문제도 없다. 챕터별로 독립된 문제들을 바탕으로 알고리즘을 설명하기에, 책의 순서는 뭘 먼저 보든지 상관이 없기 때문이다.

 

당신이 만약 자료구조를 명확히 이해하고있다면 1권부터.

기초가 조~금 모자란 것 같다면 2권부터 보는 것을 권장한다.


그래서, 정리하자면...

 

이 책은 실제 프로그래밍 대회에 나왔던 문제를 바탕으로 알고리즘을 설명한다.

해당 문제에 대한 해설이 조금은 긴 글로 상세하게 설명되어있지만, 오히려 그 덕에 이해가 더 잘 된다.

다만, 자료구조부터 차근히 보고싶은 사람은 2권 -> 1권의 역순으로 책을 보는 걸 권장한다.

책을 보는 순서는 아무런 상관이 없다. 어차피 핵심은 각 챕터에서 설명하는 '알고리즘'에 맞춰져있기 때문이다. 

 

당신이 만약 신입으로 코딩테스트를 준비한다면, 이 책을 추천한다.

비교적 문제 난이도가 높은 신입 코딩 테스트에는 이 정도 깊이는 알아야 한다고 생각한다.

 

당신이 만약 경력으로 코딩테스트를 준비한다면, 이 책을 추천하진 않는다.

비교적 문제 난이도가 낮은 경력 코딩 테스트에게 이 책은 좀 과하다.

오히려 Leetcode나 Codility, 프로그래머스를 중심으로 실전형으로 준비하는게 좋다.

 

하지만 당신이 알고리즘을 재밌어하는 개발자라면, 나는 이 책을 추천한다.

댓글
최근에 올라온 글
Total
Today
Yesterday