완독 기념 인증샷;;

이미지 출처: https://book.algospot.com

책을 처음 샀을 때는 2018년 1월 10일. (대략 3년 동안 가지고 있을 줄은 몰랐다)

당시 대학교 3학년이었는데, 친구 추천으로 정말 생각없이 샀었다. (이렇게 어려운 줄 몰랐지)

오늘 오후에 이 책을 완독(2020년 11월 28일)했는데, 여러모로 많은 생각이 들어 경험을 글로 공유하고자 한다. 게다가 실제로 책을 산 사람들은 많은데 후기글은 거의 못 본 것 같다.


책을 사기 전에는 알고리즘에 대한 지식은 거의 없었다. (백준 문제 30개 풀었나..? 학교수업은 just trash)

아무튼 알고리즘 지식은 없을 무 ;;

* 참고로 필자는 내년에 졸업을 앞둔 대학교 4년제 컴공과 학생이다.

 

기억을 더듬어보면, 책을 받자마자  "나도 이제 알고리즘의 왕이 될 수 있겠지?!" 뭐 그런 생각을 하면서 읽기 시작했던 것 같다. 마치 나는 해적왕이 될거야;

패기넘치던 3학년;;

그리고 변수의 이해부터 점점 졸리더니 ㅋㅋㅋ 동적 계획법(Dynamic Programming)의 어딘가에서 멈춰버렸다

물론 어려운 것도 있었지만 사실 알고리즘이 급하지 않아서 언젠가는 하겠지하고 책을 고이 모셔둔(쳐박아둔) 것이었따

그리고 2년 정도 흘렀나,,, (백준 문제 한 150개 풀었을 무렵) 고이 모셔둔(쳐박아둔) 종만북이 생각나서 다시 공부나 해볼까? 했는데 책을 덮고 펼치고 덮고 펼치고 를 반복했었다. (나레기 ..;)

아무튼 막학기에 캡스톤을 해야 해서 이전 겨울 방학때 1부라도 끝내자 해서 울며 겨자먹기로 1부를 읽기 시작했고, 그마저도 다 못해서 (매일 몇 시간씩 했는데도 너무 어렵더라;) 학기 중에 주말에 짬내서 봤다.

그리고 인턴하면서 2부를 시작했는데 진짜 ㅋㅋㅋ 웰컴투더헬 ..

집에ㅅ ㅓ창문에 대고 혼자 소리지르고 싶은거 굉장히 많이 참았다. 그리고 벽에 대고 머리 계속 쥐어박고 ㅠㅠ

내가 박거성인가 .. 박거성이 나인가..

책을 보면서 답답한 마음도 있었는데 설명이 이해가 되지 않아서 앞쪽으로 넘어가 다시 읽고를 무한 반복하다보니 시간이 오래 걸렸다. (정말 ㄹㅇ무한재생) 그리고 종만 님의 은혜로운 설명을 보면서 무릎을 치고 (코드 보고 내 이마를 치고;;) 를 여러 번하면서 확실히 실력 향상이 느껴지긴 하지만, 다음 장에 어려운거 또나오면 까먹는 문제가 발생했다.

한 5문제 있으면,

(와 이걸 이렇게?)

(와 이걸 이렇게?)

(와 이걸 이렇게?)

(와 이걸 이렇게?)

(와 이걸 이렇게?)

마지막 것만 기억남 ㅋㅋㅋㅋㅋㅋㅋㅋ

 

수록된 알고리즘은 각각 설명하고나서 문제를 살펴보는데 "문제 -> 접근 -> 풀이 -> 해설" 순서로 내용을 다룬다.

필자의 경우는 <문제> 읽고 혼자 고민하다가 안되면, <접근> 읽고 고민하고 그러다 안되면, 바로 풀이랑 해설을 보고 공부를 했는데 공부하는 방식은 개인의 스타일대로 하면 되는거고 나는 좀.. 오기(?) 자존심(?)이 좀 있어서 "그래도 이거는 풀 수 있겠지^^.."라는 마음으로 희망하나 버리지 않고 도전했었다.

물론 난이도 높은 문제들은 바로 풀이를 보는 것이 나았다 ㅎ;

책에는 문제별로 (하, 중, 상 이런 식으로) 난이도가 있어서 난이도가 "상"이면 30분 고민하고 안되면 바로 풀이로 넘어갔다.

왜 꼭 그런 문제들 있지 않나,, 30분 고민해도 감이 안오고 점점 딥슬립하게 되는 ㅋㅋ

실제로 그런 경우는 정말 <경험이 없어 아이디어가 생각조차 나지 않는 상황>인 경우가 대부분이었고 (난 멍청하지 않아..)

한 번 그런 풀이를 보고 나면 아래의 두 상황 중 하나가 되게 된다.

유사한 문제가 나왔을 때는 풀 수 있거나 vs 아이디어는 떠올랐는데 구현을 못하거나

구현을 못하는 건 필자의 경우 언어를 제대로 활용하지 못했던 게 큰 이유(뒤늦게 C++ 라이브러리를 정리했다지^^7)였고, 정석대로 구현하는 방법이 있는데 마찬가지로 경험이 없던 것이 문제가 되는 거였다. **이론만 안다고 되는게 아니더라..**

가끔은 내용을 이해하고 직접 짜보고 문제 풀어(무한 디버깅)보고 했는데 6시간이 지나기도 했다.

근데 넘어간 페이지는 3페이지 ㅋㅋ

그러면 자연스레 속에서 깊은 한숨이 나오면서 쓰레빠신고 동네 한바퀴 돌아준다. 안그러면 me쳐버림;

그리고 자기 전에 "ㅅㅂ 한 건했다" 이러고 ;

물론 가끔 일어난 일 ^^,,

뒤로 갈수록 자주 일어나는 일

 

체감상 느끼는 어려움은 난이도 "상" 문제들을 기준으로 했을 때 인공지능 수업시간에 C++로 다층퍼셉트론 구현한 거와 비슷하거나 그 이상이다. 역전파법(backpropagation)도 이론은 들으면 고개 끄덕끄덕하는데 실제 구현하라하면 'ㅁ'..

난이도 "중" 문제들은 60% 는 어렵다. 정말 어렵다. 비슷한 문제조차 못풀어봤다면 3시간 줘도 못 푼다.

라는 생각이 들만큼 입문자가 풀 수 있는 난이도는 아니라고 생각한다. BUT 종만 님의 알고리즘 설명이 있다면 몇 시간 걸리긴해도 풀 수는 있을 듯하다. 나머지 40%는 알고리즘 문제 좀 풀어봤다? 싶으면 도전해볼 가치는 있다. 대신 알고리즘이 뭔지에 따라 걸리는 시간은 확연히 차이가 난다.

책이 굉장히 두꺼운데 생각보다 알고리즘별로 문제가 많이 수록되어 있지는 않다. 있어봤자 5개가 최대인데 (아마?) 고작 5개 문제 풀어보고 감잡았쓰 - 완전 접쑤 - 라고 할 수는 없지 않나... 그래서 필자의 경우 leetcode에 비슷한 문제가 있는지 찾아보고 다음 챕터로 넘어가기 전에 머리도 식힐 겸 해당 문제들을 풀어봤다. 비슷한 문제니 푸는데 시간이 많이 걸리지는 않았음. leetcode 에 없으면 백준으로~


아무튼,, 주절주절 어렵다어렵다어렵다.. 디퓌컬ㅌ~ 라고 글을 썼지만, 그럼에도 이 책을 많은 사람들이 찾는 건 다 그럴만한 이유가 있지 않겠나..

확실히 읽기 전과 후는 다르다.

아래는 필자 입장(알고리즘 경험 zero)에서 이 책을 읽고 얻어간 것들을 정리한 것.

** 참고로 알고리즘과 자료구조는 다른 이론이기 때문에 알고리즘은 모르더라도 자료구조는 알고 읽기를 바람.

** 최소한 본인이 자주 사용할 언어(혹은 사용중인 언어)에서 전통적인 자료구조(스택, 큐, 우선순위 큐 등)가 어떻게 제공되는지도 무조건 알고 시작해야 함.

  • 알고리즘 문제들은 보통 현실 상황을 반영하려 하므로, 대놓고 큐에 뭐 넣어라, 스택에 뭐 넣어라 그러지 않음. 따라서 주어진 문제 상황을 이해하고 이를 어떻게 자료(Data)로 표현할 지가 문제 해결의 핵심인데 (시작이 반이라고) 종만북은 자료구조를 설계하는 방법을 A-to-Z 방식으로 설명함.

  • 문제의 해결책마다 시간 복잡도를 왜 그렇게 계산했는지 알려줌. 이게 진짜.. 종만의 미덕이 아닐까? 실제로 재귀 탐색만 하더라도 모든 노드가 아니라 부분 노드만 탐색한다던지 하면 계산하기 복잡한데, 참 수학을 잘하시는 종만 쓰앵님은 계산을 하셔서 알려주심.

  • 정당성의 증명. 사실 이 부분은 너무 어려워서 포기한 것들이 손가락으로 셀 정도로 있음. (참새가 어찌 봉황의 뜻을 알겠소) 아니면 그 당시에 이해해도 지금 봐도 모르는 부분은 당연히 존재함 ㅋㅋ. 이 부분은 귀류법이나 귀납법으로 소개한 알고리즘이 반드시 해를 찾는다라는 사실을 증명함. --> 만약 직관이 아니라 증명하는 걸 습관처럼 한다면 그때는 종만북이 필요없을 듯 싶음..

  • leetcode 의 난이도 hard 나, 백준의 정답률 20-30% 정도의 문제들을 해결할 수 있는 능력이 생김 (모든 문제 X)

  • 다양한 알고리즘 지식, 문제 풀이 경험, 등등 (+ 내가 멍청하다는 사실 ㅠㅠ && 항상 겸손히 배워갈 의지 ^^)

 

참고: 이 책은 심장과 정신건강에 해롭기 때문에, 본인이 굳건한 멘탈과 이를 갈고 도전할 의지가 있다면 꼭 사길 바람. 뭐든지 쉬워지기전에는 모든게 어렵다고.. 나는 몰라서 못푼거지 멍청하지 않아..

만약 대회 경험도 다수 있고, (SCPC 수상자는 안봐도 될듯..) 큰 대회에 자주 출전해 본 사람이라면, 책을 살 필요가 있나 싶음.

정 읽다가 힘들면 아침부터 "나는 유노윤호다"라고 생각하자.


내일부터는 종만북을 다시 읽을 듯함. 나중에 시간만 되면 추가 후기를 써보던가 해야겠음..

원래 진리를 담은 책은 매번 읽을 때마다 얻어가는게 다르다고 하지않던가..

 

'Review' 카테고리의 다른 글

2021 상반기 네이버 신입공채  (1) 2021.08.05

+ Recent posts