2022년, 이제 졸업이 1년도 남지 않은 시점에 와서야 지금의 내 상황을 알아버렸다.. 😢
그동안 개인적으로 코딩테스트 준비도 어느정도 하고 있었고, 학교 다니면서 학점도 꽤나 잘 받고 있었기에 취업 걱정을 따로 하지 않았다.
그러던 중 정말 가고싶었던 기업 중 하나인 카카오의 인턴십 공고가 올라왔다! 그래서 공부하고 있는 분야와 가장 가까운 Server 분야에 신청하기로 했다.
작년에 인턴십을 통해서 취업하신 선배님의 말씀으로는 먼저 코딩테스트에 합격하면 그 다음에 서류를 작성한다고 하셨는데.. 이번에는 서류와 코딩테스트를 함께 보는 모양이다.
그래서 막상 처음 이력서를 작성했는데.. 정말 쓸게 없다!
급하게 여기저기 찾아다니며 자기소개서 작성법, 이력서 작성법 이런 것들을 찾아 봤지만 크게 도움이 되지는 않았다. 결국 했던 활동들이 많아야 쓸 수 있기 때문에..
그래서 첫 이력서인 만큼 그나마 했던 사실들로 채워서 제출했다. 이전부터 이것저것 스터디를 진행했던 기억과 최근에 하고있는 아람 스터디에 참가했던 부분이 도움이 많이 되었다.
응시기간 : 2022-05-07 14:00 ~ 2022-05-07 19:00
테스트 문항 : 총 5문제
테스트 시간 : 300분
외부 인터넷 검색 허용
이번 공고에 지원했던 이유인 코딩테스트를 응시했다. 코딩테스트는 프로그래머스 사이트를 통해서 제공되었고, 인턴십 FAQ 와 안내 메일로 코딩테스트 주의점이 안내되었다.
결과부터 말하자면 난이도는 생각보다 쉬웠고, 나는 3 + 0.5 + 0.5 문제를 해결했다. (그래서 더 아쉽다.)
카카오 코딩테스트가 기업 코딩테스트에서는 어려운 편이라고 들었고, 실제로 연습을 위해 이전 코딩테스트 문제들을 만져봤는데 시간 안에 솔루션이 생각이 나지 않을 것 같았다.
그리고 방학까지는 꽤 열심히 하던 알고리즘 준비를 개강과 스터디 등 핑계로 그만 둔지 오래되어서 기대보다는 걱정이 컸고, 코딩테스트 경험을 쌓아보자는 목적으로 응시했다. 그런데..!
총 5문제를 5시간 내에 풀면 되는 코딩테스트인데, 자세한 풀이는 문제가 공개되고 따로 포스팅을 하고, 간단히만 살펴보면,
조건문 몇개로 잘 나눠주기만 하면 금방 풀 수 있는 구현 문제여서 금방 풀었다.
처음에 봤을 때 어려운 문제인 것 같아서 넘어가고 나중에 풀었는데, 결과적으로 "그냥 문제에서 요구하는 것을 구현" 만 하면 풀렸다.
처음에 특별한 알고리즘이 필요할 것 같아서 넘겨놓고, 마지막에 이거라도 제출하자는 생각으로 문제대로 구현하고 제출했는데, 그 코드에서 조금만 더 수정을 해서 풀었다.
문제 자체에서 그림으로 그래프 문제라고 알려주셔서 솔루션을 생각하기 쉬웠다.
간단하게 출발지마다 다익스트라 알고리즘을 사용했고, 추가적으로 문제에서 요구하는 조건들을 추가했다. 그래프 탐색에서 간선이 양방향이여서 돌아오는 길을 생각하지 않아도 되서 난이도가 많이 낮아진 것 같다.
여기까지 총 3문제는 모두 맞았고, 아래 2문제는 정확도 테스트만 통과하였다.
dp 문제인것 같아서 2차원 dp로 풀었는데, 결과적으로 마지막 효율성 테스트케이스 하나를 통과하지 못했다..
전체적으로 통과하지 못했으면 깔끔하게 포기하고 다른 방법을 찾거나 5번을 풀었을 것 같은데 그 한 녀석만 통과하지 못해서 다른생각을 하지 못했던 것 같다.
원래 5번은 시간이 정말 많이 남지 않는 이상 다른 문제에 집중하려고 풀지 않으려고 했다. 그래도 문제 확인은 해야겠어서 확인해봤는데.. 문제에서 요구하는 사항이 어디서 많이 본 문제였다.
최근에 프로그래머스에서 2022 Dev-Matching: 웹 백엔드 개발자(상반기)가 진행되어서 준비할 겸 이전 데브매칭 문제들을 풀었었고, 연습삼아 풀었던 2021년 문제인 프로그래머스-행렬 테두리 회전하기 와 굉장히 유사한 문제였다.
물론, 여기서 효율성 테스트까지 통과하려면 굉장히 어렵겠지만, 정확도 테스트는 간단하게 통과할 수 있을 것 같아서 빠르게 풀었다.
만약 3번을 빨리 통과하거나 포기해서 시간적인 여유가 있었으면 효율성면에서 조금 더 최적화를 할 수 있었을 것 같다. 당시 생각했던 최적화 방법은
- 연속된 명령의 개수를 세서 한번에 처리한다. 명령에 따라 모듈러 연산을 적용한다. (테두리 길이가 10인데, 11번 돌리는건 1번 돌리는거랑 같음)
- 회전 명령에서 길이의 절반보다 명령수가 많으면 반대로 돌린다. (테두리 길이가 10인데, 9번 돌리는건 왼쪽으로 1번 돌리는거랑 같음)
- 행을 옮기는 명령도 비슷한 방식으로 적용한다.
이런 방법들을 적용할 수 있지 않을까 했는데, 당시 3번에 눈이 돌아가있어서 많이 아쉬웠다.
나름 어려웠다는 코딩 테스트에서 나쁘지 않게 풀었다고 생각했는데 결국 인터뷰까지 가지 못하고 떨어졌다.. 😢
코딩 테스트는 무난히 풀었지만 서류 전형에서 탈락한 듯 하다.. 전에 느낀 것 처럼 포트폴리오가 많이 부족하구나 라고 다시 한번 느낀다.
열심히 하자 🔥