오랜만에 블로그를 방문한다... 자주 블로그에 글을 남기려고 했는데 최근에 다른 분야를 공부하다보니 블로그에 기록하는 것을 미루게 된다 😥
여하튼! 파이썬 알고리즘 인터뷰를 절반 정도 공부한 상황에서 느낀 점을 솔직하게 작성해 보도록 하겠다.
책을 선택한 이유
이전에 나는 인프런에서 김태원 강사님의 C++ 코딩테스트 강의를 수강한 적이 있다.
도움이 된 강의임은 분명하지만 내용이 체계적이지 않고 ( C++ 강의가 처음 출시된 강좌라 그렇다. 이후 출시된 강의들은 체계가 잡혀있다. )
Only 코딩테스트를 위한 강의라는 느낌을 받았다. ( 포인터와 클래스를 활용하지 않고 구조체로 문제를 쉽게 쉽게 푼다. )
그리고 다음학기에 인공지능을 수강할 예정이라 파이썬을 공부할 필요가 있었다.
정리하자면,
내용이 체계적이고
코딩테스트를 공부하면서 CS 지식을 배울 수 있고
파이썬이 주 언어인 컨텐츠
저번에는 인터넷 강의로 공부했다보니, 이번에는 책으로 공부하고 싶었다. 또한 코딩테스트를 준비하는 사람들이 일반적으로 책으로 공부하기에 실패할 확률이 적다고 생각했다.
따라서 내 선택지는
이것이 취업을 위한 코딩테스트이다 with Python - 나동빈 저
파이썬 알고리즘 인터뷰 - 박상길 저
중의 하나로 좁혀졌다.
이 둘은 사실 취향의 영역인데 파이썬 알고리즘 인터뷰가 파이썬에 대해 심도있게 다룬다는 평이 많았고
무엇보다 LeetCode 로 학습할 수 있다는 것이 매력적이었다.
첫 코딩테스트를 LeetCode에서 보았는데 플랫폼에 적응을 못하여 허무하게 떨어져 버렸다.
그때의 미련이 남아서 LeetCode로 공부할까 고민중이었으니, 난 망설임 없이 파이썬 알고리즘 인터뷰를 선택했다.
종이책 VS 전자책
개인적을로 둘 중 하나로 살거면 무조건 전자책으로 사는 것을 추천한다.
난 소설이나 자기계발서의 경우, 무조건 종이책으로 읽는 편인데 개발 관련 책들은 종이책보다 전자책이 좋은 경우가 종종 있다.
특히, 코딩테스트 책들 처럼 내용을 보고 타이핑을 해야하는 경우가 그렇다.
일반 서적의 경우 책상에 독서대와 펜이면 충분하지만, 개발 서적은 모니터(노트북), 키보드, 마우스가 공간을 필수적으로 차지한다.
또 코드를 읽다가 타이핑하다가 페이지를 넘기고 다시 되돌아갔다가 하는 일련의 과정이
나한테는 너무 정신산만했다.
이런 단점들로 인하여 전자책으로 재구매를 했다. 리디북스에서 E-Book이 아닌 PDF 형식으로 판매하고 있어서 보기 훨씬 수월했다.
느낀 점
일단 위에 내가 원하던 조건을 모두 충족한 책이다.
자료구조 - 그래프 - 알고리즘 순으로 체계적으로 서술되어있다. 700페이지 분량 답게 이런 내용까지? 할 법한 내용들도 다루고 있다.
단순히 LeetCode 문제를 푸는 것을 넘어 CS도 학습할 수 있다. 물론, 책이 CS 보다 문제 풀이가 주이기 때문에 이 부분은 추가 학습이 필요하다.
또한 파이썬 입문서적에서 배웠던 내용들을 확실하게 점검해주며 [::-1]의 슬라이싱 방법이 reverse 보다 속도가 빠르다던지, collections 모델이라던지, *(애스터리스크)와 zip 함수라던지 입문 서적에서는 접하지 못하는 내용까지 코드에 적용하여 알려준다.
무엇보다 가장 좋은 점은 LeetCode 플랫폼에서의 학습이다. LeetCode가 해외 사이트이다 보니 입문하기가 쉽지 않은데 이 책으로 진입장벽을 간단하게 넘을 수 있다.
그리고 LeetCode에서 약 40문제 가량 푼 결과, 그냥 여기가 최고존엄이다.
Top 100 Liked, Top Interview 등 엄선 리스트가 존재하며 난이도와 태그를 설정할 수 있어 엄선 리스트 중에 내가 원하는 파트를 집중적으로 공부할 수 있다.
전세계적으로 사용자수가 워낙 많다보니 Discuss에서 효율적인 풀이들이 언어별로 올라와 있고 좋아요 수와 싫어요 수를 확인하며 이상한 문제를 빠르게 거를 수도 있다.
영어도 반복적인 단어가 많이 나오기에 하다보면 적응이 된다.
아쉬운 점
'근데... 이거는 책의 장점이 아니라 LeetCode의 장점 아니야?' 라고 생각할 수 있는데 반은 맞고 반은 틀린 얘기이다.
어쨋든 책은 LeetCode에서 좋은 문제를 엄선하였으며 한 문제에 3~4개의 풀이를 제공하기도 한다.
다만 아쉬운 점은 LeetCode의 Discuss에 있는 풀이를 그대로 복사한 것이 꽤 있고 이런 풀이 중에 설명이 부실한데...? 라는 느낌을 주는 경우도 꽤 있다는 것이다. Discuss에 있는 풀이들이 창의적이고 우아한 것들이 많기 때문이다.
물론, 당연히 반례도 있다. 연결 리스트 파트의 walker와 runner 같이 자세하게 설명해준 경우도 있다.
그래도 결과적으로는 혼자 코드를 끙끙 공부하게 되는? 좋은 현상이 일어난다 😅
어려운 풀이의 경우 Discuss에 달린 댓글의 보충설명을 보면 수월하게 공부할 수 있다.
난 이전에 코딩 테스트를 공부한 경험이 있어 심하게 불편하지는 않았지만 이 책으로 코딩 테스트를 입문한 사람에게는 확실히 단점이 될 수 있는 요소이다.
총평
위의 아쉬운 점에도 불과하고 어느정도 베이스가 있는 사람한테는 너무 좋은 책이라고 생각한다.
수록된 문제를 다 풀 수 있는 사람이어도 책의 효율적인 풀이들이 도움이 될 것이다.
다만 입문자의 경우 막히는 내용을 너무 붙잡기 보다는 빠르게 회독하는 전략이 필요할 것 같다.