티스토리 뷰




 2018년 10월 6일 신입 개발자 공채를 위한 2019 KAKAO BLIND RECRUITMENT 오프라인 코딩테스트에 참가했다.


 온라인 코딩테스트는 지인들의 이야기를 들어보니 3문제가 합격 커트라인이 맞는 것 같다. 이번 오프라인 코딩테스트는 작년에도 비슷한 주제로 온라인에서 10시간동안 코딩테스트를 봤었는데, 오프라인으로 진행 하는 걸 보니 이번 테스트에서 합격자를 많이 걸러내려는 것 같다. 


 작년 코딩테스트에서는 적당히 문제에서 요구하는 부분을 잘 처리해주고, 예외처리를 잘 해주면 통과할 수 있었고, 조금 더 효율을 내려면 멀티스레딩 등을 사용했었던걸로 기억한다. 그래서 이번에도 아마 비슷하게 나오지 않을까 싶어서 조금 봐두었다. REST API와 JSON Parser 를 준비하라고 하였지만, 이 부분은 문제에 그렇게 큰 비중은 차지하지 않는다. 결국엔 문제에서 요구하는 부분을 정확하게 구현하고, 예외처리를 잘 하는 것이 핵심이다.

 

 오프라인 테스트는 워크앤올(경기 성남시 분당구 분당내곡로 117 알파돔타워IV 5층)에서 진행되었다. 대회는 11시부터 시험장 입장이 시작되었고 12시 40분까지 자유롭게 노트북 환경설정을 할 수 있었다. 시험장 책상 위에는 기념품으로 연습장과 볼펜이 있었고, 또 간단한 간식거리들이 잘 정리되어 있었다. 나는 일찍 가서 간단히 REST API와 JSON 응답 테스스트만 해보고 멀티프로세싱이나 멀티스레딩에 대해 조금 공부했다.



 테스트는 5시간동안 진행되었고, 문제는 총 3문제인데 각각 점수배점이 달랐다. 각 문제마다 통과하면 기본점수가 주어지고 추가점수는 랭킹순서로 매겨졌다. 엘리베이터를 구현하는 문제였는데 처음 봤을 때 매우 어려워 보였다. 각 문제마다 주어진 조건이 조금씩 다를 뿐 3문제 전부 똑같은 문제였다. 실제로 첫 번째 문제를 제대로 풀고, 문제에서 주어진 조건만 간단하게 수정하여 나머지 문제들에 제출하면 통과가 되기 때문에 기본점수는 받을 수 있었다.


 REST API를 사용하여 각 단계마다 승객과, 엘리베이터의 정보를 받고, 알고리즘을 통해 승객과 엘리베이터의 상태를 어떻게 할 것인지 결정하는 문제였다. 엘리베이터는 최대 4개까지 직접 선택해서 사용할 수 있었고, 엘리베이터의 최고은 문제마다 달랐다. 엘리베이터의 상태는 문 열리는 중, 올라가는 중, 내려가는 중 그리고 멈춤 총 4가지가 있었고, 각 상태마다 엘리베이터의 문을 열지, 닫을지, 엘리베이터에 승객을 태울지, 내릴지, 엘리베이터가 위, 아래 어디로 이동할 것인지 결정해야하는 명령을 줄 수 있었다.


 예를 들면 어떤 승객이 1층에 있고 목적지가 5층이다. 또 엘리베이터의 초기 위치는 3층에 멈춰 있다고 하자. 승객을 목적지에 내려주기 위해 엘리베이터는 다음과 같은 순서로 진행되어야 할 것이다.


  1.  엘리베이터가 1층으로 이동한다. (아래로 이동 명령, 멈춤 상태)
  2.  엘리베이터가 내려간다. (아래로 이동 명령, 내려가는 중 상태)
  3.  1층에 도착하면 엘리베이터를 멈춘다. (멈춤 명령, 내려가는 중 상)
  4.  문을 연다. (문 열기 명령, 멈춤 상태)
  5.  문이 열린다. (문 열리는 중 상태)
  6.  승객을 태운다. (승객 태우기 명령, 문 열림 상태)
  7.  문을 닫는다. (문 닫기 명령, 문 열림 상태)
  8.  엘리베이터를 5층으로 이동한다. (위로 이동 명령, 멈춤 상태)
  9.  엘리베이터가 올라간다. (위로 이동 명령, 올라가는 중 상태)
  10.  5층에 도착하면 엘리베이터를 멈춘다. (멈춤 명령, 올라가는 중 상태)
  11.  문을 연다. (문 열기 명령, 멈춤 상태)
  12.  문이 열린다. (문 열리는 중 상태)
  13.  승객을 내려준다. (승객 내리기 명령, 문 열림 상태)
  14.  문을 닫는다. (문 닫기 명령, 문 열림 상태)
  15.  멈춤 상태
 위와 같이 승객 1명을 출발지에서 엘리베이터에 태워 목적지에 내려주는 과정을 각 단계마다 명령을 REST API로 넘겨줘야 한다. 각 단계의 횟수가 기록되기 때문에 최소한의 이동으로 승객을 목적지에 내려줘야 한다. 중요한 건 승객이 1명만 있는게 아니라 여러명이 있기 때문에, 최대한 엘리베이터를 많이 사용하여 각 단계의 이동횟수를 줄이는 것이 중요한 것 같다.

 처음에는 채용을 위한 코딩테스트이기 때문에 코드를 이쁘게 짜려고 노력했다. 하지만 점점 끝나는 시간이 다가오는데 원하는 결과를 얻지 못하고, 이것저것 테스트하다가 코드가 많이 난잡해진 것 같다. 집에 와서 코드를 확인 해 보니 약 300줄 정도 코드를 작성한 것 같다. 문제를 풀면 랭킹이 매겨지는데, 문제 푸는데만 너무 열중한 나머지 시험이 끝날 때까지 랭킹을 확인하지 못해서 아쉽다. 지인의 말로는 약 300명 정도가 참가 했는데, 100명 정도 코드를 제출했다고 하니 다른 참가자들도 매우 어려워 했던 것 같다.

 이번 테스트는 정말 재미있었고, 신선했다. 카카오의 코딩테스트는 정말 좋은 방식인 것 같다. 요즘 대부분의 기업들이 특정한 알고리즘이나 자료구조를 사용하여 해결하는 문제들 또는 단순 구현 문제들로 코딩테스트를 본다. 그런데 이러한 문제들은 제한시간 내에 반드시 풀어야하기 때문에 정답이 정해져 있고, 어느정도 출제되는 문제나, 구현하는 패턴들이 정해져 있다. 그런데 카카오 테스트는 정답이 있는것이 아니기에, 본인이 문제를 해결하기 위해 가장 효율적인 방법들을 고민하고, 설계하고, 직접 구현하는 부분들을 체험해 볼 수 있어서 좋은 것 같다. 이번 테스트에 합격하면 좋겠지만 합격/불합격을 떠나서 나의 진짜 코딩 실력을 테스트해 본 것 같아 정말 좋은 경험이였던 것 같다.



댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday