2021 KAKAO BLIND RECRUITMENT 카카오 1차 코딩테스트 후기
2020년 9월 12일 토요일, 오후 2시부터 7시까지 총 5시간 동안 카카오 1차 코딩테스트를 진행했다. 아, 중간에 서버 문제로 인해서 30분 연장했으니 7시 반 까지.
사실 아직 많이 모자란 걸 알기에 카카오 채용에 마음이 크게 있었던 것은 아니고 ㅎㅎ.. 6월부터 약 3개월 동안 다른 사람들과 알고리즘 스터디를 진행했는데 검증?하고 싶었던 마음이 좀 있었다. 사실 말이 3개월이지 SSAFY 교육을 듣다보니 알고리즘에 온전히 집중하진 못했어서 ㅠ_ㅠ 떳떳하게 열심히 했다고 말하지는 못 하겠다. 알고리즘은 충분히 고민하고 디버깅하는 시간도 필요한데, 계속 반복되다보니 스트레스를 너무 받아서, 또 최근에는 공부할 시간도 부족하다보니 바로 답 찾아보고 겉핡기 식으로 공부한 것도 많고. (반성해라 나 자신)
카카오 코딩 테스트는 총 7문제인데 나는 그 중 4문제를 풀었다. 1번부터 순서대로 4번까지. 이번에 문제가 좀 쉬웠던건지, 아니면 운이 좀 좋았던건지는 모르겠지만.. 평소에 3문제를 겨우 풀까말까 했던 것을 감안하면 선방한 것 같다. 매년 합격 컷이 4솔이었다고 하는데, 글쎄...ㅎㅎ 제출할 때는 다 맞았다고 뜨더라도 내부적으로 돌려보는 테스트 케이스가 더 있을 수도 있는거니까! 😅
1번은 아이디가 주어질 때, 아이디가 조건에 맞지 않으면 주어진 과정에 따라 문자열을 변환하는 문제였다. 그냥 시키는대로 하면 되는거라 딱히 풀이랄 게 없고, 2번은 레스토랑에서 손님들이 주문한 메뉴들의 목록이 있을 때 가장 많이 주문된 조합을 구하는 문제였는데, 나는 주문에서 원하는 길이만큼 조합을 생성하면서 map에 count를 해주는 식으로 풀었다.
3번은 코딩 테스트 참가자들이 (cpp, java, python), (backend, frontend), (junior, senior), (chicken, pizza) 에서 각각 하나씩 선택하고, 각자 코딩 테스트 점수가 있을 때 [조건]을 만족하는 사람 중에서 [특정 점수] 이상인 사람은 몇 명인가?를 구하는 문제였다. 여러 방법이 있을 수 있겠지만, 나는 2번과 비슷하게 map<string, vector<int>>를 선언해서 참가자들이 선택한 조건들의 조합을 hash처럼 썼다. 예를 들어 참가자가 cpp, frontend, junior, chicken을 선택했으면 cpp, cppfrontend, cppfronendjunior, cppfrontendjuniorchicken, frontend, frontendjunior, ..., chicken 이런 조합들로 문자열을 다 만들어서 map의 key로 쓰고 value에 점수를 push했다. 마찬가지로 찾으려는 조건도 문자열로 만들어서 찾았고. 다른 코테 본 사람들 말 들어보니까 세그먼트 트리나 트라이로 푸셨다는데.. ㅗㅜㅑ 나는 모르겠다 ㅎ_ㅎ;
4번은 두 명이 택시를 타고 갈 때 최소 비용을 구하는 문제였다. 두 명은 처음부터 택시를 따로 탈 수도 있고, 특정 지점까지 같이 이동한 다음 내려서 각자 탈 수도 있다. 처음에 최단 거리라서 아무 생각없이 익숙한 다익스트라를 쓰려고 하다보니 모든 노드에서 모든 노드까지의 최단 거리가 필요하다는 걸 깨달았고, 바로 플로이드 와샬을 썼다. 시작점을 S, 각자의 집을 A, B라고 하면 모든 노드에 대해서 (S부터 환승점까지의 최단거리) + (환승점에서 A까지의 거리) + (환승점에서 B까지의 거리)를 계산하고 그 중 최솟값을 구했다.
1, 3번이 다 문자열 문제였는데 나는 C++을 쓰기도 하고 문자열을 좀 극혐하기 때문에 한 문제당 거의 1시간 씩 잡아 먹었다. 근데 4번은 오히려 엥 플로이드 와샬이네? 하고 바로 풀려서 20분 컷했다. 사실 늦게 일어나서 시험을 좀 늦게 시작했음에도 불구하고 4번 문제까지 풀었을 때 시간이 한 2시간 정도 남아있었다. 그래서 오, 이거 5솔 하겠는데? 라는 생각을 했는데.. 그것은 나의 자만이었다.. ㅎ_ㅎ
내가 감도 못 잡은 5번은 광고 시간과 사람들의 동영상 시청 시간이 주어졌을 때, 어떤 시점에 광고를 재생하면 누적 재생시간이 가장 많은 지를 구하는 문제였다. 이전 코딩 테스트의 추석 트래픽이 생각났는데 입력의 개수가 말도 안 되게 커서 (추석 트래픽은 1000이었는데 이 문제는 100,000인가 300,000인가 그랬다.) 세그먼트 트리.. 같은게 생각났지만 시간 어그로가 너무 끌릴 것 같아서 20분 정도 고민하다가 바로 넘겼다.
6번은 카드 뒤집기 게임이었는데, 4 x 4 배열이 주어지고 카드 짝을 맞출 때, 커서를 이동하고 카드를 뒤집는 데에 키를 총 몇 번 눌러야할까?라는 문제였다. 보자마자 카드 종류가 별로 없으니까 순열로 돌리면서 DFS를 쓰면 되겠구나! 싶길래 금방 풀 줄 알았다. 근데 테스트 케이스로 아무리 신박한 걸 넣어서 맞춰봐도 채점 결과에서 몇 문제 씩 틀렸다고 나오는 바람에 디버깅에만 거의 1시간을 쓰고... 결국 실패 😭 아예 문제를 잘못 이해한건지 ㅠㅠ 아직도 왜 틀렸는지 모르겠어서 나중에 문제가 공개되면 꼭 다시 풀어봐야지.
정신없이 풀다보니 7번은 구경도 못 했다. ㅎㅎ 아무튼 아직 많이 모자란 걸 뼈저리게 느꼈으니 좀 높은 수준(?)의 자료구조를 더 공부해야겠다. 구현할 때마다 가물가물... 휴ㅠㅠ 카카오 코테는 너무 어렵다!