코딩 테스트 3개월 플랜
비전공자에서 대기업 코테 통과까지, 실제로 효과 있었던 3개월 전략
실버 문제도 못 풀던 시절
3년 전, 대기업 이직을 준비하면서 코딩 테스트의 벽에 부딪혔다. 비전공자라 자료구조 수업을 들은 적이 없었고, 백준에서 실버 문제도 못 풀었다. 프로그래머스 레벨 2를 보면 문제 이해조차 안 되는 경우가 많았다.
3개월 잡고 체계적으로 준비했더니, 네카라쿠배 중 3곳 코테를 통과했다. 1곳은 떨어졌다. 천재적인 실력이 아니라 반복과 패턴 학습의 결과였다.
첫 달: 그냥 기초부터
배열, 문자열, 해시맵, 스택, 큐. 이 다섯 가지만 확실히 하면 코테 문제의 40% 정도는 손을 댈 수 있다. 화려한 알고리즘은 아직 필요 없다.
매일 프로그래머스 레벨 1을 2문제씩 풀었다. 처음엔 한 문제에 2시간 걸렸다. 문제 읽고, 멍하니 있다가, 힌트 보고, 그래도 모르겠어서 풀이 보고, 자괴감에 빠지는 사이클. 근데 한 달 후엔 30분이면 풀 수 있었다.
핵심은 못 풀겠으면 30분만 고민하고 풀이를 보는 거다. 1시간 넘게 붙잡으면 효율이 급격히 떨어진다. 풀이를 보고 이해한 뒤, 다음 날 안 보고 다시 풀어보는 게 훨씬 낫다. 이걸 "간격 반복"이라고 하는데, 기억력 연구에서도 검증된 방법이다.
(중간에 이틀 연속 문제를 못 풀어서 "나는 재능이 없나 보다" 생각하고 일주일 손을 놓은 적이 있다. 그 일주일이 좀 아깝다.)
둘째 달: 패턴이 보이기 시작한다
BFS/DFS, 이분 탐색, 투 포인터, 그리디, DP. 이 다섯이 코테의 80%를 차지한다. 나머지 20%는 문자열 처리, 구현, 시뮬레이션인데, 이건 기초 체력으로 커버 가능하다.
각 유형별로 대표 문제 5개씩 골라서 풀었다. 총 25문제를 두 번씩 돌리면 50문제. 첫 번째는 풀이 참고하면서, 두 번째는 안 보고. 같은 유형 5개를 풀면, 6번째는 "아, 이건 BFS네"라는 감이 오기 시작한다.
코테는 수학적 천재성이 아니라 패턴 인식이다. 패턴 인식은 반복으로 훈련 가능하다. 비전공자한테 희소식이다.
DP가 제일 어려웠다. 솔직히 아직도 어렵다. 근데 코테에 나오는 DP는 대부분 기본형의 변형이다. 피보나치, 배낭 문제, LCS 이 세 가지 변주를 익히면 대부분 대응할 수 있다. 완벽하게 이해 못해도 패턴을 외우면 어떻게든 풀리는 경우가 꽤 있다.
셋째 달: 시간 재고 실전처럼
프로그래머스 레벨 2~3을 60분 제한으로 풀었다. 풀든 못 풀든 60분 지나면 풀이 확인. 주말에는 기출 문제를 3시간 세트로 모의시험을 봤다.
가장 중요한 건 시간 분배다. 3문제 주어지면 쉬운 거부터 빠르게 풀고 어려운 거에 시간을 남겨야 한다. 어려운 문제에 먼저 달려들었다가 쉬운 문제도 못 푼 적이 세 번이나 있다. 이건 알고 있어도 실전에서 반복하게 되는 실수라서, 모의시험으로 교정하는 수밖에 없다.
언어는 매일 쓰는 걸로 해라
나는 JavaScript로 봤다. Python이 유리하다는 말이 많지만, 업무에서 쓰는 언어로 보는 게 실수가 적다. 새 언어 배우면서 알고리즘까지 하면 부담이 두 배다.
JS로 볼 거면 Map, Set, 배열 메서드를 완벽하게 익혀야 한다. Array.prototype.sort()의 기본 정렬이 유니코드 문자열 기준이라는 함정에 한 번은 걸린다. [1, 2, 10].sort()가 [1, 10, 2]를 반환하는 걸 보고 경악한 기억이 난다.
자주 하는 실수들
시간 복잡도를 고려하지 않는 게 가장 흔하다. 레벨 2부터는 브루트포스로 풀면 시간 초과 난다. 문제 보자마자 입력 크기를 확인하는 습관을 들여라. n이 10만 이상이면 O(n^2)는 안 된다. n이 100만 이상이면 O(n log n)까지만 가능하다.
엣지 케이스도 중요하다. 빈 배열, 원소 하나, 전부 같은 값. 이런 케이스에서 런타임 에러 나서 73점 받는 경우가 허다하다.
멘탈이 제일 중요하다
3개월 동안 매일 문제 푸는 건 고역이다. 중간에 두 번 포기하고 싶었다. 그때마다 "이건 3개월짜리 프로젝트다, 영원히 할 일이 아니다"라고 되뇌었다. 완벽하게 준비되는 날은 안 온다. 60% 준비된 상태에서 시험 보고, 부족한 부분을 보완하는 게 현실적이다.
코테가 실력을 제대로 평가하는 방식인지는 솔직히 모르겠다. 실무에서 DP를 쓸 일이 거의 없는 것도 사실이다. 근데 대부분의 회사가 요구하는 이상 안 할 이유가 없다. 하루 1시간, 90일. 이 단순한 공식이 전부였다.