책 리뷰 - 문제 해결력을 높이는 알고리즘과 자료 구조

길벗 출판사 17차 개발자 리뷰어 이벤트를 통해서 받은 문제 해결력을 높이는 알고리즘과 자료 구조 리뷰입니다.

읽기 전의 상황

내 당시 상황 : BOJ. 백준에서 골드 3정도. 프로그래머스 Level 2까지는 여차저차 풀 줄 아는 수준

백준에서 골드를 찍을 때 부터였을까? 발목을 잡는 난관이 몇 개 생겼다.

1. 시간 / 메모리 초과
2. 처음보는 알고리즘 카테고리

시간, 메모리 문제는 '체감상' 이러면 되지 않을까? 하면서 해결했었다.
for문을 2중으로 돌리는 것을 1번으로 줄인다거나 하는... 맞는 방법은 맞지만 즉흥적이고 본능적인 부분이지 계산이 서지 않는 방식의 문제해결 방법이었다.

백준 티어는 어느순간 정체되었다. 새로운 돌파구가 필요했다. 위 2가지, 이론적인 베이스를 보완하지 않으면 백준 플래티넘은 요원하다.

리뷰 이벤트를 하는 책 목록 중에서 코딩테스트를 위한 책은 이것 하나 뿐이었다. 이건 못참는다.

주의 : 일단 책 읽기 전에 C / C++을 할 줄 알아야 한다. 제공하는 소스코드도 다 C++...

책을 읽으면 좋을 사람 / 아직 아닌 사람 / 굳이 읽을 필요 없는 사람

  1. 책을 읽으면 좋을 사람

    • 문제풀이를 해보고 싶은 사람
    • 복잡도 계산에 대해 궁금한 사람
    • 백준에서 알고리즘 분류(스택, 큐, DFS 등등)를 보고 뭔 말인지 잘 모르겠는 사람
    • 문제를 풀 때 생각이 아니라 손이 먼저 가는 사람
  2. 아직 책을 읽지 않아도 되는 사람

    • 배열, 조건문, 반복문을 할 줄 모르는 사람
    • 문제풀이를 한 번도 해보지 않은 사람 (이론보다 문제풀이를 겪어보는게 먼저라고 생각한다)
  3. 굳이 읽을 필요 없는 사람 (이 책에서 알려주는 것)

    • 복잡도 계산에 대해 공부한 사람
    • 자료구조 / 알고리즘을 공부한 사람
    • 문제풀이에서 자료구조 / 알고리즘을 활용할 줄 아는 사람

책이 알려주지 않는 것

  • C / C++ 문법. 이미 안다고 가정하고 시작한다.

책이 제시해준 나의 2가지 문제 해결 방안

1. 시간 초과 / 메모리 초과의 늪


(책에선 1초를 10억이라고 하는데, 백준에선 1억으로 통용하는 것 같다.)
시간 복잡도를 계산해보는 예제에 대한 설명이 자세하고 바로바로 숫자로 나와서 읽기 좋았다.
이 책에서는 한 챕터를 할애해 복잡도 계산법, 중요성, 주의사항, 예시까지 전부 다룬다. 지금 내 수준에서 가장 필요한 복잡도의 개념을 자세하기 예시를 들어가며 계속 설명해준다.

  • 복잡도 계산이 가능해진다는 얘기는 미리 문제 해결에 대한 설계를 해봤을 때, "아 이렇게 풀면 어짜피 시간초과구나!"라는 것을 알게 되기에 열심히 코드를 짜고 실패를 보는 상황을 줄일 수 있다.

2. 처음보는 알고리즘 카테고리

  • 분리집합 (Disjoint-set). 이 책에선 유니온 파인드(Union Find)라고 한다. 백준을 풀다보면 여러 모르는 알고리즘 분류를 보게 되는데, 많이 사용하는 알고리즘은 이 책에서 거의 커버되는 것 같다.


책의 구성은 위 사진과 같다. 자세히 읽고 싶은 사람은 책 목차를 참고하자.

지금의 상황

  • 이론을 책으로 배운다면, 실천은 백준으로 하면 된다. 수만가지 문제가 존재하고, 엄청 많은 알고리즘 분류를 갖고 있다.

    원래는 인강을 위해 제작한듯한 code.plus 문제집에는 코드 분류별로 양질의 문제가 존재한다. 책에 나온 부분을 읽으면서 하나씩 풀고 있고, 어려운 부분도 있지만 책의 내용을 어떻게 적용하는 지를 알 수 있게 해줬다.


암튼 지금은 골드2다. 골드 1까지는 금방 갈 것 같고 플래는 시간의 문제지 언젠가 될 것이라는 믿음이 생겼다.

여담

예제에는 그림으로 친절하게 설명까지 해준다. (심지어 그림이 좀 귀엽다)

좋은 웹페이지 즐겨찾기