"코딩테스트에 쓰이는 것들은 실무에서 안 쓰지 않아?"
"이거 공부해서 어디에 써?"
제가 학원 강사와 과외 수업을 진행하면서 가장 많이 들었던 질문들입니다. 여기에 대한 답을 정리해 두었습니다.
기업이 코딩테스트를 실시하는 이유
코딩테스트는 현대판 수능이다
저는 이런 질문을 받을 때마다 코딩테스트를 수능에 비유합니다.
서울대에서 수능 성적이 좋은 학생을 선호하는 이유는 무엇일까요? 수능 성적이 좋다는 것은 그만큼 학생의 종합적인 사고력이 뛰어나다는 의미입니다. 이런 사람은 어떤 분야에 투입되어도 성과를 낼 가능성이 높습니다. 국어국문학과를 가도, 수학자가 되어도, 음악을 해도, 심지어 농사를 지어도 말입니다.
"나는 국어국문학과에 갈 건데 왜 수학 공부를 해야 하지?"라고 의문을 품을 수 있습니다. 하지만 수능은 자신의 종합적인 학습 능력을 증명하는 시험이기에, 정시로 진학하려면 수학 공부가 필요한 것입니다.
코딩테스트도 마찬가지입니다
코딩테스트를 잘 풀었다는 것은:
- 뛰어난 문제해결능력
- 탄탄한 구현 능력
- 논리적 사고력
을 갖추고 있다는 증거입니다.
이러한 역량을 갖춘 개발자는 어떤 기술 분야에서도 빠르게 적응하고 성장할 수 있습니다. 웹 개발을 해도, 블록체인을 해도, 인공지능을 개발해도, 인프라 구축을 해도 말입니다.
"나는 프론트엔드 쪽 일을 할 건데 왜 코딩테스트를 봐야 하지?"라는 의문이 들 수 있습니다. 하지만 코딩테스트는 근본적인 구현 능력과 문제해결능력을 평가하는 도구이며, 이는 프론트엔드 개발에서도 필수적인 역량입니다.
코딩테스트와 개발자 역량의 상관관계
그럼 코딩테스트가 어떻게 이 능력들을 보여준다는 것일까요? 크게 3가지 관점에서 살펴볼 수 있습니다.
논리적 사고력 강화
코딩테스트 문제를 해결하는 과정은 논리적 사고력을 크게 향상시킵니다. 코딩테스트 문제를 풀 때 복잡해 보이는 문제를 단계별로 분해하고 효과적인 해결책을 찾는 것이 중요합니다. 이 능력을 키우면 실무에서도 큰 도움이 될 수 있습니다. 실무를 하다 보면 큰 프로젝트를 진행하는 경우가 있습니다. 이때 당황하지 않고 어떻게 문제를 해결할지 분석하고 효율적인 해결책을 찾아갈 수 있습니다. 이러한 능력은 특히 디버깅이나 레거시 코드를 분석할 때에도 많은 도움이 됩니다.
효율적인 코드 작성
코딩테스트는 시간 복잡도와 공간 복잡도를 고려한 효율적인 알고리즘 설계 능력을 키웁니다. 실무에서도 성능 최적화는 중요한 과제입니다. 특히 대용량 데이터 처리나 실시간 서비스 개발 시에 이러한 능력은 필수적입니다.
글로벌 게임처럼 수백만 명의 유저가 동시에 접속하는 서비스에서는 최적화가 생명입니다. 최적화가 제대로 되어 있지 않으면 접속 지연, 높은 핑 현상이 발생하고 결국 유저 이탈로 이어집니다.
문제 해결 패턴 학습
코딩테스트를 꾸준히 준비하다 보면 다양한 문제 해결 패턴을 습득하게 됩니다. 이러한 패턴 인식 능력은 새로운 기술이나 프레임워크를 학습할 때도 빠른 적응을 가능하게 합니다. 코딩테스트에서 배운 접근 방식은 실무의 다양한 문제 상황에서 창의적인 해결책을 도출하는 데 큰 도움이 됩니다.
코딩테스트를 잘 본다는 뜻은 이런 능력이 이미 갖춰져 있는 사람이라는 뜻입니다.
코딩테스트 준비 전략
코딩테스트를 해야한다는 것은 알겠지만 어떻게 준비해야 할까요? 저는 백준과 solved.ac를 추천합니다.
백준과 solved.ac의 장단점
백준은 다양한 문제를 풀 수 있는 사이트고 solved.ac는 백준을 더 효과적으로 쓸 수 있는 사이트입니다. 각 사이트의 장단점입니다.
백준의 장점:
- 방대한 문제 수 (32,000개 정도)
- 다양한 난이도와 유형의 문제
백준의 단점:
- 문제 품질의 편차가 있음
- 난이도 표시가 없어 적절한 문제를 찾기 어려움
solved.ac 장점:
- 백준 문제에 난이도 등급(티어) 부여
- 알고리즘별 문제 분류 제공
- 사용자 수준에 맞는 문제 추천
solved.ac 티어
solved.ac에는 브론즈, 실버, 골드, 플레티넘, 다이아, 루비 6개의 티어가 있고 각 티어마다 5단계로 구분되어 있습니다. 각 티어별 체감 난이도입니다.
브론즈 (입문)
- 프로그래밍 언어 기초 문법 숙달
- 간단한 조건문, 반복문 활용 능력 확인
- 코딩 초보자가 먼저 도전해 볼 단계
실버 (기본)
- 기본적인 알고리즘 개념 적용 시작
- 자료구조의 기초(배열, 스택, 큐 등) 활용
- 코딩에 어느 정도 익숙한 사람들에게 적합
골드 (심화)
- 복잡한 알고리즘 문제 등장
- 삼성 코딩테스트 수준(골드 1)
플래티넘 이상 (전문가)
- 알고리즘 대회 수준의 문제
- 일반적인 코딩테스트 준비 단계에서는 필수 아님
여러분이 골드까지 안정적으로 풀 수 있다면 대부분의 코딩테스트 통과 가능하다고 생각하셔도 됩니다.
문제 풀이 전략
"문제를 풀다 막히는 경우에 끝까지 잡고 있어야 하나요, 빨리 답을 보고 넘어가는 것이 좋을까요?"라고 물어보시는 분들이 있습니다. 여기에 대한 답은 남은 시간에 따라 다릅니다.
시간이 별로 없는 경우
만약 여러분이 시간적인 여유가 없다면 최대한 많은 문제를 푸는 것을 추천드립니다. 1시간 정도 고민해도 진척이 없다면 인터넷 검색으로 답을 찾아보셔도 됩니다. 단, 이렇게 푼 문제는 다음 날 혼자 힘으로 풀 수 있어야 합니다
시간적 여유가 있는 경우
시간이 여유롭다면 문제를 조금 더 오래 생각해 보는 것이 좋습니다. 하루 정도 생각해도 답이 나오지 않는다면 잠시 접어두고 조금 쉬운 문제를 풀어보세요. 그 문제를 푼 다음 다시 돌아와서 하루 정도 고민을 해 보세요. 그래도 답이 나오지 않는다면 그때는 검색을 해도 됩니다. 마찬가지로 이렇게 푼 문제는 다음 날 혼자 힘으로 풀 수 있어야 합니다.
코딩테스트 실력은 단기간에 오를 수 있는 것은 아닙니다. 꾸준한 연습과 적절한 난이도 상승으로 실력을 키워가는 것이 중요합니다. 자신의 페이스를 유지하며 꾸준히 문제를 풀어나가는 것이 중요합니다.