Last updated on 1월 26th, 2024 at 03:13 오후
최근에는 개발자 채용 프로세스에 코딩테스트를 보지 않는 기업을 찾는 것이 힘들어졌다. 코딩테스트란 코딩으로 테스트를 진행하는 것으로 개발자 입사 프로세스의 일부이다. 단순히 문제를 푸는 과정이 아닌, ‘손코딩’이나 내가 작성한 코드를 가지고 진행하는 ‘코딩인터뷰’ 등으로 진행된다.
개발자 취업 관련 글 : 4학년 개발자 취업 준비 앞두고, 컴퓨터 공학 기초가 부족하다고 느낀다면?
코딩테스트, 무엇을 보기 위한 시험일까?
코딩테스트는 말 그대로 ‘테스트’이기 때문에, 개발자로서의 기초 역량과 소양을 보기 위한 시험이라 할 수 있다. 그러므로 입사 지원자들이 걱정하는 것만큼, 대회에나 나올 법한 고급 알고리즘 지식을 요구하지는 않는다. 결국, 코딩테스트는 개발자 채용을 위한 과정 중 하나로 ‘현업에서 개발할 수 있는 사람인가’를 확인하고자 하는 것이기 때문이다.
프로그래머 추천 글 : 현직 개발자가 신입 개발자에게 던지는 조언
코딩테스트에서 요구하는 역량은 다음의 3가지이다.
- 추상화 (상황 분석)
- 절차적 사고
- 구현 능력
따라서 코딩테스트는 기초 알고리즘을 활용하여, 주어진 상황을 코드로 얼마나 잘 구현해낼 수 있는가가 관건이다. 물론, 어렵고 까다로운 문제들도 존재하지만, 카카오나 삼성 등 가고자 하는 기업의 코딩테스트 문제들을 분석하고 반복하여 연습하는 것만이 방법이라 할 수 있다.
개발자 추천 글 : 프론트엔드 개발은 정말 쉬운가? 신입 개발자가 갖춰야 할 기본기에 대해
코딩테스트의 정의와 분석
코딩테스트는 ‘주어진 시간동안 주어진 문제를 요구사항에 맞게, 프로그래밍하여 ACCEPT나 점수를 받는 시험’이다. 그럼 정의에 맞게, 코딩테스트라는 시험 자체에 대해 분석해보자.
1. 주어진 시간동안 주어진 문제를
문제를 받고, 문제에 서술된 상황을 바탕으로 모델링 한다. 그 다음 절차적 사고에 맞춰 프로그램을 짜고 이를 코드로 구현한다. 결국, 코딩테스트는 앞서 말한 3가지 역량을 제한 시간 안에 얼마나 효과적으로 보여줄 수 있는지를 확인하는 시험이다.
2. 요구사항에 맞게
코딩테스트에 등장하는 대표적인 개념들은 이미 정해져 있다. 코딩테스트가 어려운 이유는 문제에서 말하는 요구사항이 매우 복잡하다는 점에 있다. 이는 마치 수능 국어 시험과 비슷하다. 대체로 사용되는 알고리즘은 기초적이지만, 여러 개의 조건에 걸려 있기 때문에 이를 모두 만족할 수 있는 코드를 오류 없이 작성하는 것이 어렵다.
3. 프로그래밍하여
코딩테스트는 결국 프로그래밍이다. 그러므로 시험에 임하는 개발자 입장에서 환경 체크는 필수이다. 가장 먼저 짚고 넘어가야 하는 부분은 어떤 언어로 시험을 치를 것인가이다. 코딩테스트에 가장 많이 활용하는 프로그래밍 언어는 다음과 같다.
- C++ : 비교적 문법이 어렵지만, 언어 자체의 속도가 빠르고 STL 등의 장점이 있다.
- PYTHON : 쉽고 간단한 문법으로 이루어져 배우기 쉽고 적용하기 좋다. 범용성이 넓다.
- JAVA : 비교적 문법이 어렵지만, 자바 개발자를 포함하여 필요로 하는 직군이 많아서 경쟁력 있는 선택이다.
어떤 언어를 사용할 것인지는 개인에게 달려 있다. 가능하면 문제에 따라 언어를 바꿔 사용하는 것을 추천한다. 재귀 깊이가 깊은 문제나 자료구조를 많이 활용해야 하는 문항에 대해서는 C++를 추천한다. 반면, 정렬 이나 파싱 등 객체를 다루는 경우에는 파이썬이 적합하다.
이외에도 특정 IDE를 제공하는 테스트인지, 자체 IDE를 사용하는 테스트인지 미리 숙지해야 한다. IDE란 통합 개발 환경(Integrated Development Environment)으로 코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어를 말한다(위키백과 통합 개발 환경 참고).
특정 IDE를 제공하는 테스트라면, 해당 IDE에 대해 미리 연습하고 어떤 컴파일러를 사용하는지, 디버깅 방법 등을 체크해둔다. 자체 IDE를 사용하는 테스트라면, 코드가 실수로 날아가는 문제는 없는지, 복사 붙여넣기 등이 가능한지 미리 알아두면 좋다.
4. Accept나 점수를 받는
프로그래머 취업을 준비하는 학생들 사이에서는 ‘맞왜틀’이라는 준말이 있다. ‘나는 맞았는데 왜 틀렸나요?’라는 뜻이다. ‘내 로직은 정확했는데, 왜 틀린 거지? 채점 서버가 이상한 것 아닌가?’ 라는 질문이 많이 올라오는 걸 볼 수 있다. 하지만 대부분의 경우는 채점 프로그램의 문제는 아니다.
‘틀렸습니다(WA)’를 받는 데에는 수많은 이유가 있을 것이다. 하지만 이 또한 8가지 정도의 대표적인 실수로 귀결될 수 있다. WA의 원인은 다음과 같다. 아래의 원인 중 내가 범한 실수가 무엇이 있는지 생각해보며 연습해야 한다.
- 제한 및 대소 관계 (이상, 이하, 초과, 미만 등)
- 예외 처리 (단, 없는 경우는 -1을 출력한다)
- 입력과 출력 (공백, 양식, 순서, 정렬의 유무)
- 시간 제한과 메모리 제한
- 출제자가 원하는 알고리즘을 썼는가
- 내가 생각한 로직대로 코드를 구현했는가
- 불필요한 반복문은 없는가
- 중복은 처리했는가
코딩테스트 취약점 파악하기
코딩테스트 준비는 어떻게 해야 할까? 우선 코딩테스트에서 내가 가장 약한 부분이 어디인지 먼저 알면 무엇을 더 먼저 공부하고 연습해야 하는지 정할 수 있다.
1) 문제 모델링이 어려워요.
코딩테스트에 나오는 문제를 보기만 해도 막막해지는 사람이다. 문제에서 제시하는 내용을 각각의 조건으로 어떻게 나눠야 하는지 감을 잡지 못하고 어려워 하는 사람이 있다. 이 경우 아래의 3가지를 중점적으로 연습해야 한다.
- 수치 및 조건 정리하기
- 전체적인 흐름 그리기
- 입출력 예제 이해하기
2) 문제를 풀다가 계속 막혀요.
코딩테스트를 준비하려면 많은 문제 유형을 풀어보면서 감을 익혀야 하는데, 문제 풀이 과정에서 계속 막히는 경우이다. 문제를 풀다가 계속 막히는 것은 어쩔 수없이 경험치를 많이 쌓아야 해결된다. 코딩테스트에 등장하는 필수 알고리즘은 무조건 암기하되, 알고리즘은 많이 알아두면 알아둘수록 도움이 된다.
- 필수 알고리즘은 암기하기
- 누군가에게 설명하는 것처럼 말하면서 풀어보기
- 모델링을 바탕으로 기능을 가볍게 적어보기
3) 풀이는 아는데 구현이 안 됩니다.
이런 어려움을 호소하는 학생들에게 가장 많이 하는 말은 ‘예제와 정답이 한 번에 나오길 기대하지 말자’라는 것이다. 그러므로 디버깅 연습을 부단히 해야 한다. 개인에 따라 자체 id를 사용하거나 디버깅 툴을 활용이 어렵게 느껴질 수 있다. 그렇다면, print 함수를 이용해 디버깅하는 연습을 해본다.
- 디버깅 연습을 열심히 하고, print 함수를 활용하기
- 쉽고 간단한 문제를 많이 풀어보며, 나만의 스타일 만들기
- 억지로 최적화하지 말고, 출제자의 의도를 이해하는 연습하기
코딩테스트 준비에 유익한 사이트
- 백준 온라인 저지 : 알고리즘 문제 및 채점 서비스를 제공하는 프로그래밍 사이트이다. 국내에서 개발자 코딩테스트를 준비하는 사람들이 가장 많이 이용하는 플랫폼이다.
- 릿코드 : 알고리즘 문제 풀이가 가능한 사이트로, Easy / Medium / Hard 3단계로 나뉘는 문제를 선택 또는 랜덤 제공 받아 이용할 수 있다.
개발자 취준생 추천 글 : 소프트웨어 개발자가 되기까지
올해는 코딩테스트와 기술면접 제대로 준비하고 싶다면?
아래에서 내게 맞는 강의를 선택해보세요.
유형별 문제 풀어보며 근본적인 실력을 키우고 싶다면
알고리즘 유형별 240문제와 모의고사까지 챙겨주는 강의 보러가기 ↓
비전공자로 기초부터 탄탄히 실력을 쌓고 싶다면
무료로 들을 수 있는 백엔드 부트캠프 보러가기 ↓