라떼는말이야
Do it! 알고리즘 코딩 테스트 - 파이썬 편 후기 본문
2022년 8월 16일 자로 기존의 Do it! 알고리즘 코딩 테스트 자바 편을 이어서 파이썬 편이 출간되었다. (두 책 다 김종관 저자가 집필한 책이다)
우연히 이지스퍼블리싱에서 이 책의 서평단을 모집한다는 공지를 보게 되었고, 간단히 책의 대상과 구성 등을 살펴보니 나에게 너무 필요한 책이라는 생각이 들어 지원을 하게 되었고, 운 좋게도 서평단에 선정되어서 책을 지원 받아 빠르게 읽어볼 수 있었다.
책에서 소개하는 문제가 100 문제나 되고, 쉬운 문제만 있는 것도 아니기 때문에 책을 전부 살펴보지는 못했지만 2/3 정도 읽어보고 이 책에 관심이 있는 사람들에게 소개해줄 수 있을 것 같아서 내가 책을 읽으면서 느낀 것들을 위주로 소개해보려고 한다.
누가 이 책을 읽으면 좋을까
우선 내 상황에 대해 얘기해보자면, 나는 작년 8월에 처음 코딩 테스트를 접하게 되었고, 주로 백준과 프로그래머스에서 문제를 풀어왔다.
백준 (2022.08.26 기준)
- 등급 : Gold1(solved.ac 기준)
- 푼 문제 수 : 486 문제
- 등수 : 6475 (solved.ac - AC RATING 랭킹 기준)
프로그래머스 (2022.08.26 기준)
- 레벨 : 2단계 거의 풀고 3단계 푸는 중
- 푼 문제 수 : 168 문제
- 등수 : 1331
코딩 테스트를 준비하는 수준으로는 아주 잘하지도, 또 아주 못 하지도 않는 수준이라고 생각한다.
하지만 나는 아주 고질적인 문제를 가지고 있다. 바로 충분한 시간이 있으면 풀 수 있는 문제를 코딩 테스트와 같이 제한된 시간에 여러 문제를 풀어야하는 상황에서는 상당히 고전한다는 점이다.
두 번째 유형에 속한다고 생각되어서 이 책이 필요하겠다고 생각이 들었던 것이다.
그리고 직접 책을 읽어보니 위에서 소개하는 3 개의 유형이 모두 이 책에 적잡하겠다는 생각이 들었다.
- 코딩 테스트를 처음 접해봐서 어떤 유형이 있는지 잘 모르는 사람
- 코딩 테스트를 해봤는데 문제를 풀 때 시간이 부족하고 실수가 많은 사람
- 빠르게 유형을 확인하고 관련 문제를 풀어봐야 하는 사람
다만 자신이 어떤 유형이냐에 따라서 책을 읽는 방법은 달라져야 한다고 생각한다.
책의 구성
위 두 페이지는 본격적으로 책 내용에 들어가기 앞서 가이드가 될 수 있는 부분이라고 생각한다.
위에서 설명한 3 가지 유형 중 왼쪽 사진의 30일 완성 코스는 1, 2 번 유형이, 그리고 오른쪽 사진의 3일 모의고사는 3 번 유형이 참고하면 좋을 것 같다.
단, 왼쪽 사진의 30일 완성 코스는 2번 유형과 같이 어떤 유형이 있는 지는 알고 있는 경우 좀 더 빠르게 넘어가도 좋다.
첫째 마당 - 코딩 테스트 준비하기
첫번째 파트에서는 코딩 테스트를 준비하면서 중요한 개념인 시간 복잡도와 디버깅에 대해서 소개한다.
시간 복잡도는 어떤 문제를 접했을 때 사용하고자 하는 알고리즘으로 이 문제를 풀 수 있을 지 여부를 판가름하는 아주 중요한 기준이 되기 때문에 중요한데 이 부분에 대해서 코드와 그래프를 통해 아주 잘 알려준다.
디버깅 파트에서는 디버깅의 중요성과 더불어 PyCharm 등 IDE 에서 디버깅하는 법을 소개한다. 디버깅의 중요성을 잘 알려주는 부분이지만 약간 아쉬웠던 부분은 요즘 코딩 테스트에서 외부 IDE 사용을 금지하는 경우가 많아지고 있는데 이러한 부분에 대해 언급이 없었다는 점입니다. 이 책을 통해 처음 코딩 테스트를 공부한 사람이 외부 IDE 사용을 금지하는 시험을 마주한다면 당황할 수 있는 부분이기 때문에 외부 IDE 를 제한할 수 있다는 사실도 명시해주었으면 더 좋지 않았을까 하는 아쉬움이 남는다.
둘째 마당 - Do it! 코딩 테스트 - 기초 편
기초 편에서는 코딩 테스트를 치루는데 기초가 되는 자료구조나 알고리즘에 대해서 소개한다.
자료구조는 프로그래밍 언어마다 다양하게 지원되고, 각 자료구조의 특징이 모두 다르기 때문에 반드시 알고 있어야 하는 부분이다. 특히 비슷한 동작을 하더라도 자료구조에 따라 시간 복잡도가 달라지기 때문에 자료구조 선택에 신중해야 한다.
이 책에서는 배열과 리스트(연결 리스트)에 대해서만 소개하고 있다. 다만 파이썬에서는 배열과 리스트를 구분하지 않기 때문에 해당 부분도 설명하고 있다. 즉, 파이썬과 그 외 언어들을 모두 고려해서 설명하는 점이 좋게 느껴졌다.
그 외에 알고리즘들을 설명하다보면 Deque 이나 Heap 과 같은 자료구조를 사용해야 할 때가 있는데 이런 추가적인 자료구조들은 필요한 시점에 다시 소개해주고 있기 때문에 큰 문제는 없어 보인다. 다만 파이썬 책이니만큼 파이썬의 다양한 자료구조와 각 연산들의 시간 복잡도 등을 한데 모아서 설명해주면 더 좋지 않았을까 하는 아쉬움은 남는다.
둘째 마당에서 다루는 알고리즘은 다양한 정렬 알고리즘과 탐색 알고리즘(BFS, DFS, 이진 탐색), 그리디, 정수론을 소개한다.
그리고 여기부터는 본격적으로 알고리즘 소개와 함께 관련된 문제를 다양하게 제공한다. 대부분 다음과 같은 구조를 따른다.
- 알고리즘 소개 및 설명 (+팁)
- 문제 소개
- 문제 분석
- 손으로 풀어보기
- 수도코드 작성
- 파이썬 코드 소개
그리고 2~6 번 과정은 한 알고리즘에 여러 문제를 제공하는 경우 반복된다. 또한 문제의 난이도는 다양하게 제공된다.
이 책의 가장 큰 장점은 3, 4, 5 번 과정에 있다고 생각한다.
다른 책이나 블로그 등을 보면 알고리즘 -> 문제 -> 코드로 설명 하는 과정을 따르는 것이 많다. 하지만 이런 식으로 공부한다면 (내가 그랬던 것처럼) 결국 문제를 풀 수는 있지만 시간이 오래 걸리거나 실수를 많이하게 될 수 있다.
코딩테스트를 잘 하는 비결은 문제를 잘 분석하고, 전반적인 흐름을 파악한 후에 대략적으로 의사 코드를 작성해보고 그 이후 코드를 작성하는 것이라 생각한다. (물론 이런 과정이 숙달되어서 의사 코드를 작성하는 등의 과정은 생략될 수도 있겠다)
이 책에서 실제로 어떻게 알고리즘을 소개하고, 문제를 풀어나가는지 보여주기 위해 기수 정렬 파트 일부를 가져와봤다.
우선 기수 정렬 알고리즘에 대해 소개하고 그림을 통해 직관적으로 보여준다.
그리고 해당 알고리즘을 사용해서 풀 수 있는 쉬운 문제부터 소개된다. (주로 실버 수준의 문제가 가장 먼저 소개된다)
문제의 제목 밑을 보면 난이도와 몇 번 문제인지도 표시하고 있다. 실제로 boj.kr/10989 혹은 https://www.acmicpc.net/problem/10989 를 접속해보면 다음과 같이 백준에서 제공되고 있는 문제라는 것을 확인할 수 있다.
백준에서 제공되는 문제이기 때문에 다양한 테스트 케이스가 모두 통과 되는지 확인할 수 있다. (등급은 solved.ac 의 등급 기준을 따르고, 이 등급은 시간이 지나면 변할 수 있기 때문에 책에 기록된 등급과 차이가 있을 수 있다)
다음으로는 문제를 분석하는 과정이 있다. 이 부분에서는 주로 시간 복잡도를 계산해보고 사용하려고 하는 알고리즘이 적잡한지 판별한다.
그리고 손으로 풀어보기 봐정에서 전체적인 흐름에 대해 파악하게 된다.
이후 전체적인 흐름을 수도코드로 작성한 후 실제 코드로 작성하는 부분을 보여준다.
이런 과정으로 진행되는 것이 실제 코딩 테스트를 응시하는 입장에서 문제를 보고 코드를 작성하기 까지 어떤 과정이 필요한지를 따라가 볼 수 있기 때문에 이러한 점이 이 책의 장점이라고 생각한다.
문제의 난이도도 실버5 부터 플래티넘 레벨까지 다양해서 자신의 수준에 맞는 문제를 풀어볼 수 있다는 점도 좋다. (나는 실버 문제들은 건너 뛰고, 골드 이상 문제들만 참고했다)
그리고 각 단계 별로 자신이 막히는 부분에서 이어서 진행할 수 있다는 장점도 있다. 우선 문제를 보고 직접 문제를 해석해보다가 막히면 책에서 문제를 어떻게 해석하고 있는지 확인할 수 있고, 어떤 알고리즘을 사용해야하는지, 어떤 과정으로 풀어야 하는지 모를 때 또 한 번 참고해 볼 수 있고, 코드를 어떤 흐름으로 작성해야 할 지 모르겠을 때 마지막으로 수도 코드를 확인해볼 수 있다.
수도 코드까지 확인했는데도 통과하지 못하거나 코드를 어떻게 작성해야 할 지 모르겠다면 그 문제는 아직 풀 수 있는 수준의 문제가 아니거나 문제를 제대로 파악하지 못 한 것이다.
마지막에 나와 있는 코드는 실제로 구현한 후에 확인하는 용도로만 사용하면 좋을 듯 하다.
셋째 마당 - Do it! 코딩 테스트 - 실전 편
실전 편에서는 기초 편과 동일하게 진행된다. 여기서 다루는 내용들은 그래프, 트리, 조합, DP, 기하 알고리즘 들이다.
책의 구성은 기초 편과 동일하기 때문에 추가 설명은 필요 없을 듯 하다.
다만 살짝 아쉬웠던 부분은 최소 신장 트리를 구하는 알고리즘으로 크루스칼 알고리즘, 프림 알고리즘 등 여러 알고리즘이 있는데 최소 신장 트리를 구하는 방법으로 크루스칼 알고리즘을 설명하면서 크루스칼 알고리즘이라는 말을 하지 않아 마치 최소 신장 트리 알고리즘 = 크루스칼 알고리즘 과 같이 오해할 수 있는 부분이 있었다는 점이다.
정리
나는 기존에 파이썬으로 코딩 테스트 연습을 시작했다가 현재는 코틀린으로 풀이하는 것을 연습하고 있다. 이 책에서는 파이썬에서만 적용되는 내용 뿐만 아니라 알고리즘의 원리 자체와 문제를 해석하는 부분을 포함하고 있기 때문에 충분히 다른 언어로도 문제를 풀 수 있는 능력을 기를 수 있다.
코딩 테스트를 처음 접하는 사람, 이미 코딩 테스트를 치뤄 봤지만 시간이 부족했거나 실수가 많은 사람, 코딩 테스트에 익숙하지만 빠르게 준비해야 하는 사람 등 다양한 독자가 대상이 될 수 있고, 책에서는 다양한 독자들을 위한 가이드를 해준다.
더군다나 모든 문제들은 백준에 수록된 문제를 다루고 있기 때문에 다양한 테스트 케이스로 채점 해보면서 내 코드의 정확도를 높일 수 있다.
다만 문제의 수준이 실버 ~ 골드 (일부 플래티넘) 수준이라 알고리즘 대회 수준까지는 커버하지 못한다. 기업 채용 대상의 코딩 테스트를 준비한다면 무리 없이 커버할 수 있는 범위라고 생각한다. (그럼에도 불구하고 더 다양한 문제들을 스스로 풀어보아야 한다)
'후기 > 📚책책책' 카테고리의 다른 글
[Do it! 지옥에서 온 문서관리자 깃&깃허브 입문] - 후기 (2) | 2022.10.28 |
---|