알고리즘

나의 코딩테스트 취약점은 뭘까? 코테 보기 전에 꼭 읽고 가세요.

#코딩테스트 #백엔드 #알고리즘


개발자 채용 프로세스에 코딩테스트를 보지 않는 기업을 찾는 것이 최근에는 힘들어졌습니다. 코딩테스트란 코딩으로 테스트를 진행하는 것으로 개발자 입사 프로세스의 일부죠. 단순히 문제를 푸는 과정이 아닌, ‘손코딩’이나 내가 작성한 코드를 가지고 진행하는 ‘코딩인터뷰’ 등으로 진행됩니다.

코딩테스트

코딩테스트, 무엇을 보기 위한 시험인가

코딩테스트는 말 그대로 ‘테스트’이기 때문에, 개발자로서의 기초 역량과 소양을 보기 위한 시험이라 할 수 있습니다. 그러므로 입사 지원자들이 걱정하는 것만큼, 대회에나 나올 법한 고급 알고리즘 지식을 요구하지는 않죠. 결국, 코딩테스트는 개발자 채용을 위한 과정 중 하나로 ‘현업에서 개발할 수 있는 사람인가’를 확인하고자 하는 것이기 때문입니다.

코딩테스트

실제 코딩테스트에서 요구하는 역량은 다음의 3가지입니다.

- 추상화 (상황 분석)
- 절차적 사고
- 구현 능력

코딩테스트는 기초 알고리즘을 활용하여, 주어진 상황을 코드로 얼마나 잘 구현해낼 수 있는가가 관건입니다. 물론, 어렵고 까다로운 문제들도 존재하지만, 카카오나 삼성 등 가고자 하는 기업의 코딩테스트 문제들을 분석하고 반복하여 연습하는 것만이 방법이죠.

코딩테스트를 정의하고 분석해보자

코딩테스트의 정의는 ‘주어진 시간동안 주어진 문제를 요구사항에 맞게, 프로그래밍하여 ACCEPT나 점수를 받는 시험’입니다. 그럼 정의에 맞게, 코딩테스트라는 시험 자체에 대해 하나 하나 뜯어볼까요?

1. 주어진 시간동안 주어진 문제를

코딩테스트

문제를 받고, 문제에 서술된 상황을 바탕으로 모델링 합니다. 그 다음 절차적 사고에 맞춰 프로그램을 짜고 이를 코드로 구현합니다. 결국, 코딩테스트는 앞서 말한 3가지 역량을 제한 시간 안에 얼마나 효과적으로 보여줄 수 있는지를 확인하는 시험입니다.

2. 요구사항에 맞게

코딩테스트

코딩테스트에 등장하는 대표적인 개념들은 이미 정해져 있습니다. 그런데도 코딩테스트가 어려운 이유는 문제에서 말하는 요구사항이 매우 복잡하다는 점에 있죠. 이는 마치 수능 국어 시험과 비슷합니다. 대체로 사용되는 알고리즘은 기초적이지만, 여러 개의 조건에 걸려 있기 때문에 이를 모두 만족할 수 있는 코드를 오류 없이 작성하는 것이 어렵습니다.

3. 프로그래밍하여

코딩테스트 3대장

코딩테스트도 결국 프로그래밍입니다. 그러므로 시험에 임하는 개발자 입장에서 환경 체크는 절대 빠뜨려서는 안 되는 단계이죠. 가장 먼저 짚고 어떤 언어로 시험을 치를 것인가 결정해야 합니다. 코딩테스트에 가장 많이 활용하는 프로그래밍 언어는 다음과 같습니다.

- C++ : 비교적 문법이 어렵지만, 언어 자체의 속도가 빠르고 STL 등의 장점이 있다.
- PYTHON : 쉽고 간단한 문법으로 이루어져 배우기 쉽고 적용하기 좋다. 범용성이 넓다.
- JAVA : 비교적 문법이 어렵지만, 자바 개발자를 포함하여 필요로 하는 직군이 많아서 경쟁력 있는 선택이다

어떤 언어를 사용할 것인지는 개인에게 달려 있습니다. 가능하면 문제에 따라 언어를 바꿔 사용하는 것을 추천합니다. 재귀 깊이가 깊은 문제나 자료구조를 많이 활용해야 하는 문항에 대해서는 C++를 추천합니다. 반면, 정렬 이나 파싱 등 객체를 다루는 경우에는 파이썬이 적합합니다.

코딩테스트 IDE

이외에도 특정 IDE를 제공하는 테스트인지, 자체 IDE를 사용하는 테스트인지 미리 숙지해야합니다. IDE란 통합 개발 환경(Integrated Development Environment)으로 코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어를 말합니다.

특정 IDE를 제공하는 테스트라면, 해당 IDE에 대해 미리 연습하고 어떤 컴파일러를 사용하는지, 디버깅 방법 등을 체크해두세요. 자체 IDE를 사용하는 테스트라면, 코드가 실수로 날아가는 문제는 없는지, 복사 붙여넣기 등이 가능한지 미리 알아두면 좋습니다.

4. Accept나 점수를 받는

구글애널리틱스

프로그래머 취업을 준비하는 학생들 사이에서는 ‘맞왜틀’이라는 준말이 있죠. ‘나는 맞았는데 왜 틀렸나요?’라는 뜻입니다. ‘내 로직은 정확했는데, 왜 틀린 거지? 채점 서버가 이상한 것 아닌가?’ 라는 질문을 한 번쯤은 누구나 해봤을 텐데요. 하지만 대부분의 경우는 채점 프로그램의 문제는 아닙니다.

‘틀렸습니다(WA)’를 받는 데에는 수많은 이유가 있을 겁니다. 하지만 이 또한 8가지 정도의 대표적인 실수로 귀결될 수 있습니다. WA의 원인은 다음과 같은데요. 아래의 원인 중 내가 범한 실수가 무엇이 있는지 생각해보며 연습해보시길 추천합니다.

1. 제한 및 대소 관계 (이상, 이하, 초과, 미만 등)
2. 예외 처리 (단, 없는 경우는 -1을 출력한다)
3. 입력과 출력 (공백, 양식, 순서, 정렬의 유무)
4. 시간 제한과 메모리 제한
5. 출제자가 원하는 알고리즘을 썼는가
6. 내가 생각한 로직대로 코드를 구현했는가
7. 불필요한 반복문은 없는가
8. 중복은 처리했는가

나의 코딩테스트 취약점은 무엇일까

코딩테스트 준비는 어떻게 해야 할까요? 우선 코딩테스트에서 내가 가장 약한 부분이 어디인지 먼저 알면 무엇을 더 먼저 공부하고 연습해야 하는지 정할 수 있을 겁니다. 다음 중 나의 코딩테스트 취약점은 어디인지 한 번 생각해볼까요?

1) 문제 모델링이 어려워요.

코딩테스트에 나오는 문제를 보기만 해도 막막해진다면 이런 경우가 많습니다. 문제에서 제시하는 내용을 각각의 조건으로 어떻게 나눠야 하는지 감을 잡지 못하고 어려워 하는 거죠. 이 경우 아래의 3가지를 중점적으로 연습해보세요.

- 수치 및 조건 정리하기
- 전체적인 흐름 그리기
- 입출력 예제 이해하기

코딩테스트 개발자취업

2) 문제를 풀다가 계속 막혀요.

코딩테스트를 통과하려면 많은 문제 유형을 풀어보면서 감을 익혀야 합니다. 그런데 문제 풀이 과정에서 계속 막히면 답답하죠. 문제를 풀다가 계속 막히는 것은 어쩔 수없이 경험치를 많이 쌓아야 해결되는 겁니다. 코딩테스트에 등장하는 필수 알고리즘은 무조건 암기하되, 알고리즘은 많이 알아두면 알아둘수록 도움이 될 거예요.

- 필수 알고리즘은 암기하기
- 누군가에게 설명하는 것처럼 말하면서 풀어보기
- 모델링을 바탕으로 기능을 가볍게 적어보기

코딩테스트 개발자취업

3) 풀이는 아는데 구현이 안 됩니다.

이런 어려움을 호소하는 학생들에게 가장 많이 하는 말은 ‘예제와 정답이 한 번에 나오길 기대하지 말자’라는 겁니다. 디버깅 연습을 부단히 해야 합니다. 개인에 따라 자체 id를 사용하거나 디버깅 툴을 활용이 어렵게 느껴질 수 있습니다. 그렇다면, print 함수를 이용해 디버깅하는 연습을 해보면 도움이 됩니다.

- 디버깅 연습을 열심히 하고, print 함수를 활용하기
- 쉽고 간단한 문제를 많이 풀어보며, 나만의 스타일 만들기
- 억지로 최적화하지 말고, 출제자의 의도를 이해하는 연습하기

코딩테스트

코딩테스트 준비에 유익한 사이트 추천

백준 온라인 저지
알고리즘 문제 및 채점 서비스를 제공하는 프로그래밍 사이트입니다. 국내에서 개발자 코딩테스트를 준비하는 사람들이 가장 많이 이용하는 플랫폼입니다.

릿코드
알고리즘 문제 풀이가 가능한 사이트로, Easy / Medium / Hard 3단계로 나뉘는 문제를 선택 또는 랜덤 제공 받아 이용할 수 있습니다.

패스트캠퍼스 한 번에 끝내는 코딩테스트 369 (Java 편)
코딩테스트 준비가 처음이라 막막한 사람에게 추천하는 강의로, 총 369문항의 코딩테스트 문제 풀이를 제공합니다. 실제로 기업에서 코딩테스트 문제를 출제해본 적 있는 출제위원이 직접 강의하며, 카카오/라인/네이버 등 IT 대기업의 출제경향이 반영된 모의고사까지 제공됩니다. 개념 + 유형정복 + 문제풀이 3단계로 코딩테스트를 완전히 정복할 수 있도록 도와드립니다.


지금 패캐머들이 읽고있는 BEST 아티클이 궁금하다면

이 글과 연관된 주제의 추천 강의