알고리즘은 공부해야 한다?!!
몇 년 전부터 알고리즘 기반의 코딩 테스트의 중요성이 높아졌다. 특히 회사에서도 알고리즘 테스트를 진행하고 있다. 변명일 수도 있지만 이전에만 하더라도, 나에게 알고리즘은 알고 있으면 좋지만 시간을 들이며 공부할 필요성을 느끼지 못했다.
그 시간에 실제 일을 진행하는데 필요한 기술과 지식을 공부하는 게 더 낫다고 생각했다.
그러고 시간이 흘러 이직을 위해 면접을 보게 되었다. 좋은 기회였음에도 불구하고, 프로젝트도 바쁘고, 한 번에 통과하기 어렵겠지라는 안일한 생각에 충분히 준비를 하지 못했다.
코딩 테스트는 몇 년 동안 매일 가장 많은 시간을 보내는 일이 개발이다 보니 막연히 크게 걱정하지 않았다.
대략 세 시간에 걸쳐 면접을 진행했다. 1시간마다 다른 면접관들과 인터뷰를 진행했고, 마지막은 항상 코딩 테스트를 진행했다. 문제는 비교적 간단한 알고리즘이었다. 하지만 충분히 연습이 되어있지 않는 상태에서, 모르는 알고리즘을 구현하려고 하니 생각대로 잘되지 않았고, 특히 면접이라는 특수한 상황 때문에 막히는 부분들이 생길수록 말리기 시작했다.
면접관들과 질의응답은 부족한 상태로 라이브 코딩 테스트를 마무리하게 되었다.
그 면접 이후로 나는 알고리즘과 코딩 인터뷰는 시간과 노력을 들여서 공부해야 한다 생각하게 되었다. 현재 대부분의 개발자 채용 과정에서 코딩 테스트는 이루어진다. 물론 채용 인터뷰 과정에서 온전히 내가 어떤 경험과 능력을 가지고 있는지 드러내기는 어렵다고 생각한다.
하지만 현실적으로 내가 새로운 기회를 얻기 위해서는 알고리즘을 알아야 하고, 코딩 인터뷰를 잘 진행할 수 있는 준비가 되어있어야 한다.
알고리즘을 공부하면서 기존에 개발된 시스템에 성능 문제가 발생하면, 어떻게 시간 복잡도를 줄일 수 있을지 고민하게 되고 생각의 범위도 넓혀서 고민할 수 있게 되는 점도 알고리즘 공부를 통해서 얻을 수 있는 이점이다.
“실전 대비 C 알고리즘 인터뷰“ 책을 읽게 되다.
면접 실패를 경험하고, 프로젝트도 한가해지면서 알고리즘 공부를 하고 있었다. 길벗에서 진행하는 개발자 리뷰어 기회를 통해서 “실전 대비 C 알고리즘 인터뷰”를 신청하여 읽게 되었다. 책의 목차를 읽고 나서, 나처럼 알고리즘 공부를 시작하는 사람들이나 코딩 인터뷰 경험이 부족한 사람들에게 도움이 되지 않을까 하는 기대가 생겼기 때문이다.
이 책을 읽고 나서 이 책을 읽어볼까 고민하고 있을 사람들에게 도움이 되었으면 하는 바람에 내용을 정리해보았다.
어떤 사람들이 읽으면 도움이 될까?
- 자료구조나 기본적인 알고리즘을 공부하려는 사람
- 알고리즘 공부를 시작하려는 입문자
- 문제 접근법을 알아도 코드로 구현이 어려운 사람
“자료구조나 기본적인 알고리즘을 공부하려는 사람”
책에 절반에 걸쳐서 자료 구조, 기본적인 알고리즘을 다룬다. 이론 설명을 실제로 돌아가는 코드를 통해서 보여주기 때문에 독자가 실제로 예제를 보고 구현할 수 있는 점이 장점이다. 이론 부분만 있거나 의사 코드(pseudocode)만 있는 경우에 실제로 구현하려하면 잘 안되는 경우도 있어 구글에서 검색하는 경우도 많다. 하지만 이 책은 책만 보고도 알고리즘 구현까지 완성할 수 있는 점이 장점이다.
“알고리즘 공부를 시작하려는 입문자”
시간 복잡도에 대한 개념이 부족하거나, 시간 복잡도를 개선하는 방법에 미숙한 경우 이 책은 도움이 된다. 실제로 예시를 해결하는 방법을 여러 단계에 걸쳐서 설명을 진행한다. 브루트 포스부터 시작해서 시간 복잡도를 개선할 수 있는 방법으로 설명을 진행한다.
시간 복잡도 개선하는 방법에 익숙하지 않은 사람의 경우 이 책의 접근 방식은 도움이 될 것이다. 또한 자료구조나 기본적인 알고리즘을 중점으로 다양한 케이스별 예시가 있고, 구현 코드가 반복해서 이어진다. 알고리즘 공부를 시작하려는 입문자가 알고리즘 구현 연습을 할때 참조하기 좋은 책이라 생각한다.
“문제 접근법을 알아도 코드로 구현이 어려운 사람”
만약 책을 읽고자 하는 사람이 C 언어를 모르고 다른 프로그래밍 언어만 안다고 하더라도 책을 읽기에 크게 어려움은 없다. 책을 보다 보면 읽는다는 느낌보다는 알고리즘 유형별로 구현 코드를 참고할 수 있는 쿡북에 가깝다. 케이스별로 실제로 돌아가는 코드가 있기 때문에 문제 접근 방식은 알더라도 코드로 구현하기 어려운 사람이 보기에 좋다.
이 책에 부족한 부분
- 대부분 코드 위주의 설명으로 진행되기 때문에 알고리즘 유형별 이론적인 설명이나 문제별 접근법에 대한 충분한 설명은 부족하다.
- 책을 읽기 전에 기대했었던 코딩 인터뷰를 잘 진행하는 방법에 대한 설명은 너무 짧다.
마치며
요즘에는 알고리즘을 공부할 수 있는 다양한 방법들이 존재한다. “백준”같은 온라인 문제풀이 사이트, 온라인 강의, 알고리즘을 다루는 다양한 서적들도 존재한다. 다양한 컨텐츠들 사이에서 막상 알고리즘 공부를 시작하려면 현재 내 수준에 맞는 방법을 찾기 어렵다.
온라인 문제풀이 사이트에서 문제를 풀어보려고 하면 어떤 알고리즘을 써야할지 생각이 안 떠올를 수도 있고, 알고리즘을 막상 사용하려고 하면 어떻게 구현해야 할지 모르겠는 경우도 있다.
알고리즘 입문자나 익숙해질 때까지 자료구조, 알고리즘 구현하는 연습을 할 때 이 책은 큰 도움이 된다. 개인적으로는 문제 사이트에서 문제를 풀 때 어떤 자료 구조나 알고리즘을 구현해야 하는데 구현 방법이 떠오르지 않을 때 참고하기에 좋았다.
마지막으로 알고리즘을 공부하거나 이 책을 읽어보려는 사람들에게 리뷰가 도움이 되었으면 한다.