개인적으로 먼저 고백하자면, 나는 알고리즘 인터뷰를 그렇게 좋아하지 않는다.(내가 좋은 결과를 본적이 없어서 그렇다 크하하하…) 2012년에 아마존 RDS팀과 트위터 캐시팀과 면접을 본적이 있는데, 아마존은 전화면접에서…(생애 첫 해외 면접이었던…), 트위터는 On-site 인터뷰(본사에서 직원들과 하루종일 보게 되는… 이 날, 5번의 면접과 1번의 점심 면접을 본…) 를 샌프란시스코에서 보고 딱 떨어졌다.
그때는 사실 해외의 IT면접이라는게 이렇게 알고리즘 면접이라는 걸 몰랐던 시기이기도 하고… 면접이라는 압박감에 떨기도 했는데…
사람들마다 다른 생각이 있겠지만, 개인적으로 나는 알고리즘 인터뷰라는 건, 일종의 학습이라고 생각한다. 즉, 누군가 천재라서 모르는 문제를 딱하고 한번에 풀어내는게 아니라, 해당 분야에 대해서 약간의 경험이 있는게 좋다라는 것, 아는 분 중에 구글에 가신 한분은 구글은 400문제 풀면 붙고, 그것보다 덜 풀면 떨어진다고 하셨는데, 입사 동기들도 다 400문제 이상씩 풀고 들어왔다라는 얘기를 해주셨는데(리트코드, 해커랭크 같은 사이트들) 많이 풀면서 어떤 방식들을 사용하는지, 기저에 깔려있는 내용들을 이해해야 한다.
그리고 실제 풀이에 들어가면, 개인적으로는 C/C++/JAVA 보다는 좀 더 생각을 표현하기 쉬운 언어를 좋아하는데, 파이썬 같은 경우도 대부분의 문제 풀이 사이트나, 회사들에서도 알고리즘 인터뷰에서 허용하는 언어이다. 튜플이나, 맵, 리스트 같은걸 표현하기도 쉽고…
또한, 알고리즘 인터뷰가 무조건 맞춰야 유리하기는 하지만, 갑자기 뿅 하고 정답만을 말한다면 도리어 떨어지기 더 쉬울 수도 있다, 내가 이 문제를 어떻게 이해했는지 설명하고, 모르면 힌트를 요구해도 된다. 사실 알고리즘 인터뷰는 문제를 푸는 과정에서 지원자가 어떻게 자신의 내용을 표현하고, 커뮤니케이션을 하는지를 보는 것도 큰 일부중에 하나이기 때문에, 힌트도 주고, 그 힌트에서 정답을 향해 잘 가는 모습을 보면 더 좋아한다. 그러나, 당연히 기본적인 지식을 잘 알고 이를 풀 수 있는 모습을 보여주는게 첫번째이므로, 핵심 내용을 잘 알아야 한다.
개인적으로 이 책을 보면서, 신기했던 부분은 문제 풀이가 거의 대부분 크게 2가지 형태로 되어 있다. 일반적으로 문제를 해결하는 방법과 파이썬의 특성을 이용해서 이용하는 방법이다. 개인적으로 알고리즘 인터뷰면 일반적으로 문제를 해결해야 하는 방법으로 풀어야 하지 않을까 생각을 하지만, 파이썬의 특성을 이용해서 해결 하는 방법은 훨씬 더 간결하다.(실무에서 구현해야 한다면 파이썬의 특성을 이용하는 방법을 쓰는게 더 좋다.) 그리고 거기에 대한 성능 측정도 함께 해두었는데…
초반에 나오는 문자열 뒤집기 같은 경우는 이걸 출력만 하면 되는지, 아니면, 실제 값을 바꾼채로 전달해야 되는지에 따라서, 뒤에서 부터 그냥 출력하는 방법과, 처음과 끝에서 swap을 이용해서 처리할 수 있는 방법이 있는데… 파이썬에서 제공하는 방법을 쓰면 그냥 reverse() 함수를 쓰면된다. reverse 함수는 리스트에서만 적용할 수 있는데… 스트링은 [::-1] 이런 방식을 통해서도 가능하다.(나도 이 문법은 이번에 처음… 배운… 크…)
재미난 건 이런 방식들이 리트코드에서 되는지 안되는지 이런 부분도 나온다는 것… 상길님의 엄청난 노력이 눈에 보이는듯하다.
책 전체에서 지금까지의 알고리즘 서적, 또는 알고리즘 인터뷰 서적과는 조금 다르게 만들고 싶어하시는게 보이는데, 예전에 PHP스쿨로 유명하신 정진호님의 일러스트도 읽는데 굉장히 도움을 준다.
당연히 알고리즘 서적이기 때문에, 쉽게 적었다고 해서 읽기에도 무조건 쉬운책이 아니라서, 이해를 하려고 노력을 많이 해야 할듯 하다. 문제를 하나하나 이해하면서 풀어본다면, “파이썬 알고리즘 인터뷰” 라는 책은 알고리즘 인터뷰를 해야 하는 상황이거나, 그렇지 않은 상황이라도, 파이썬을 쓴다면 파이썬 답게 문제를 해결하는 방법을 알려주는 좋은 길잡이가 될것이다.
어떤 언어를 쓴다면, 해당 언어를 잘 알고 써야 한다는 상길님의 말은… 나도 꽤 동감하는 편이다. 물론 모든 언어를 내부까지 잘 알고 쓸 수는 없겠지만…(입금 드리븐 으로 일해야 할 경우도 있으니…) 내가 뭔가를 공부하고자 하는 언어라면… 그 언어에 맞게 짜는 건 꼭 필요한 일이 아닌가 싶다.