알고리즘 책 1회독 회고

코지클래식·2021년 11월 7일
1

코딩테스트를 볼 일이 있어서 책을 한권 사서 보게되었다.

내가 책을 사기 이전에 공부했던 방법은...
1. 프로그래머스에서 문제풀이
2. lv.2 부터 학습(자료구조/알고리즘)이 필요하다는 것을 알게됨.
3. 프로그래머스 페이지에 나와있는 태그(해시, 스택/큐, 힙, 정렬, ...)의 이론을 찾아서 공부 (유료강의도 몇개 봄)
4. 다시 문제풀이

이러한 과정이었다.

기초 이론을 찾아보는 동안, 굉장히 퀄리티 높은 무료강의를 볼 수 있었는데,
바로 나동빈님의 '이것이 취업을 위한 코딩테스트다' 유튜브였다.

  • 프로그래머스 고득점 Kit 페이지



그러나 눈에 보이는대로 문제풀이를 하다보니
유형정리가 되지 않는 것처럼 느껴졌고,
(사실 공부를 좀 해봤던 사람이라면, 다들 공부한 내용을 카테고리/이론/유형 등으로 분류하고 싶은 마음이 있을 것이다 - 마치 수능 문제집처럼)

좀 더 깊이있게 공부하고자 책을 한권 구매했다.
찾아보니 동빈북/상길북이라는 2대 바이블이 있는데, 나동빈님의 강의는 이미 들어봤기 때문에 다른 책은 뭐가 다를까 하고 구매해보게 되었다.

2대 바이블 중의 하나인 상길북

이 책을 보면서 알게 된 점 몇 가지를 나도 기억하고, 남들도 보라고 포스팅하고자 한다.

1. 결국 유형은 있다.

수많은 문제가 존재하고, 한 문제에는 여러가지 풀이방법이 있을 수 있다.

DFS로, BFS로도 풀 수 있는 문제가 있다면, 결국 for loop를 엄청나게 돌려서 풀 수 도 있는 등의 .. 한 문제에 대해 여러가지 해법이 있을 수 있다.

문제의 조건에 따라 풀이법이 정해진다.

그러나 결국 문제에 주어진 제한조건에 따라 각각의 풀이법으로 풀 수 있는지 없는지가 정해진다. 예를 들어, matrix(행렬) 형태로 조건이 주어진 문제에 대해서는 보통 graph 형태로 문제를 풀게 되는데, 이에 대해 거리에 대한 조건이 주어지느냐에 따라 DFS를 사용할 수 있느냐 없느냐가 달라진다는 점이 그렇다.
굉장히 단편적으로 적었지만 내가 느낀점은 결국 문제 유형에는 한계가 있고, 따라서 시간을 들여서 공부하다 보면, 입시 문제풀이 (유형에 따라 정해진 해법으로 빠르게 풀기)가 가능하다는 것이다.

난이도는 점점 어려워진다.

애초에 코딩테스트의 목적은, 텍스트를 읽고 얼마나 주어진 조건과 input에 맞추어 결과를 반환하는 논리를 만들 수 있겠냐는 거였겠지만.. 이렇게 입시 문제풀이가 가능해진 이상, 결국 모든 사람들이 점점 더 잘 풀게 되는 현상이 일어나는 것처럼 보인다. 애초에 같은 문제를 돌려 쓸 수 없다는 점도 문제다. 아무리 문제를 잘 만들어도 어차피 기출로 다 공유되지 않는가?
결국 회사들은 유의미한 점수차이를 내기 위해, 재능의 차이보다는 문제풀이를 누가 더 성실하게 많이했느냐? 의 구도로 가고 있는 것처럼 보인다.
하나의 창의적이고 어려운 문제를 만들기 어렵기 때문에, 간단한 문제를 N개를 종합해서 문제를 낸다는 것이 느껴진다. 그리고 이는 코딩테스트가 점점 어려워지게 되는 구조로 갈 수 밖에 없는 것 같다.

결국 정답은 시간투자

그리고 이를 해결하기 위한 방법은 결국 시간투자이다.
모든 사람들이 "알고리즘 풀이는 어떻게 잘해요?" 라는 질문에
"시간 투자를 많이 하세요." 라는 대답이 나온 데에는 다 이유가 있는 법이다.
나도 혼자서 인터넷 보면서 끙끙거릴때는 와닿지 않았다.
그러나 책에 순서대로 정리된 풀이법을 보면서 하루에 12시간씩 문제풀이를 해보니 바로 느낌이 왔다.

2. 공유하고 싶은 키워드

알면 유용할만한 키워드를 몇개 적어본다.

투 포인터

보통 왼쪽 끝과 오른쪽 끝의 두점을 시작으로,
두개를 점점 가까이 붙여가면서 탐색하는? 기법.

로드팩터

딕셔너리는 데이터가 엄청나게 들어가도 리스트보다 효율적일까?
해시함수의 효율성을 계산할 수 있는 방법이 있다.

그리디와 DP

그리디와 DP는 비슷한것 처럼 보이지만, 그리디를 사용할 수 있는 유형과 DP를 사용할 수 있는 유형이 따로 정해져 있다.


....
이 모든 내용이 상길북을 보시면 다 나와있으니
한번 읽어보시라!

3. 회고

하루에 열시간씩 들여서 책을 7일정도 봤는데, 약 3/4 밖에 읽지 못했다.
특히 정독을 했음에도 초반 부분에는 속도가 엄청나게 빠르게 읽었다.
그러나 한번 이해가 안되는 부분(재귀/그래프 등)에 오니
그 앞의 내용을 내가 놓친게 있어서 이렇게 어려운건지 의심하게 될 정도였다.

그래도 앞으로 코딩테스트를 볼 때도, 내가 봤던 부분들에 대해서만큼은 어느정도 자신감이 생겼다.
또 책에 있는 내용이 내가 봤던 코딩테스트에 적용되지는 않았지만, 적어도 내가 "A를 몰라서 이걸 못풀겠다..." 라는 식의 내용은 없어서, 문제풀이에 자신감이 생겼다. 멘탈도 안흔들렸다.

코딩테스트를 필수로 해야하는 백엔드 취준생이라면, 모두들 필수로 읽어야 할만한 책이라고 생각이 든다. (전공책에서 이미 이런 내용을 배운게 아니라면)

profile
코지베어

0개의 댓글