개요
2021 카카오 코딩테스트를 프로그래머스
사이트에서 실전과 똑같이 5시간
동안 시간을 재고 문제를 풀어보았다. 이에 대한 후기를 적는다.
후기
나는 2018
년도와 2019
년도의 카카오 코딩테스트를 풀어보았는데, 아무래도 이 두 해의 기출들과 비교하게 될 것 같다.
우선 전체적인 유형은 크게 변하지 않았다. 카카오에서 항상 출제되는 유형은 이제 아래처럼 고정된 것 같다.
- 문자열
- 완전 탐색
- 이분 탐색
- 그래프 탐색
- 최단 거리
이 5개
는 거의 고정인 것 같고, 이외에는 투포인터
, DP
, 유니온 파인드
, 그리고 트라이
까지 매우 다양하게 나오는 편이다.
난이도 측면에서 보면 우선 마지막 문제
를 제외하고는 모두 전체적으로 이전 년도들보다 더 쉽게 느껴졌다. 모두 위에서 소개한 5가지 유형에 포함되는 문제들이었다. 그래서 보통 카카오 1차 코딩테스트
는 합격 커트라인이 4솔
인걸로 알고있는데 올해는 5솔
정도였지 않을까 싶다. 마지막 문제를 제외한 모든 문제를 완벽히 풀어내는 전략이 좋게 먹혔을 것 같다.
올해 마지막 문제는 시험 시간 내에 풀어내지 못했다. 나중에 올라온 풀이를 보니 트리 DP
문제인 것 같던데 나로선 아직 접해보지 못한 유형이었다. 그동안 만났던 마지막 문제는 비록 시간내에 풀어내지 못하더라도 해설을 보면 유형은 아는 내용이라 다시 도전하면 풀리곤 했는데 이번엔 그렇지 않아서 풀이를 보고도 당황했다. 마지막 문제 만큼은 확실히 전 년도들에 비해 어려워진 것 같았다.
또 한 문제 시간 내에 못 푼 문제가 있었는데 바로 2번 문제인 메뉴 리뉴얼
문제였다. 조합을 찾는 문제인데 그래프 탐색
과 분리 집합
으로 푸는 문제가 아닐까 하고 고민에 고민을 거듭하다 시간만 날리고 결국 못 푼채 다음 문제로 넘어가고 다시 돌아오지 못했다. 하지만 이 문제는 완전 탐색
으로 풀리는 문제였다. 다시보니 입력의 수가 압도적으로 적었다… 아예 브루트 포스
로 풀 생각 자체를 못했다. 항상 입력의 수가 큰 문제들만 풀어서 생긴 부작용인지.. 이 점은 반성해야겠다고 생각했다.
그 외 문제는 모두 수월하게 풀어냈는데 카드 짝 맞추기
문제는 비교적 덜 수월했다. 삼성 SW 역량테스트
문제와 아주 유사한 유형의 최단거리
문제였는데 이런 문제 특성 상 문제를 정말 꼼꼼히 읽고 구현할 때에도 차근차근 구현하나가야 한다. 왜냐하면 한 번 틀리면 디버깅에 정말 많은 시간이 소모되기 때문이다. 당장 고쳐야할 곳이 쉽게 보이지 않기 때문에 문제를 다시 읽고 코드도 차근차근 다시 뜯어보아야 한다. 그런데 결국 그 일이 일어났다. 시간을 정말 많이 뺐겼는데 그래도 다행히 잘못 생각한 점을 깨닫고 코드를 고쳤더니 해결할 수 있었다.
이렇게 총 7문제 중 5문제를 해결했다. 지금까지 2개년 기출을 풀어오며 합격선에 들어온 것은 이번이 처음이었다. 예전에는 알고리즘 유형은 많이 알았어도 문제를 보고 유형을 파악하지 못하거나 유형을 파악했더라도 구현 능력이 부족해 해결하지 못하는 경우가 많았는데 이번년도야 말로 내가 아는 유형들은 아는대로 다 푼 시험이었다. (물론 틀린 2번째 문제는 유형 파악 자체를 잘못했다…) 이번 모의 테스트를 통해 어느정도 자신감도 생기고 내 부족한 점도 발견한 것 같다. 올해부터는 실제 지원을 통해 현장에서 코딩 테스트를 응시해 볼 생각이다.
문제별 간단 후기
신규 아이디 추천
문자열
+구현
문제였다. 알고리즘 보단 단순히 본인이 쓰는 언어에 익숙한지를 묻는 문제였다.
메뉴 리뉴얼
완전탐색
을 통해 얻은 정보를 적절한 자료구조
를 이용하여 문제해결을 할 수 있는지 묻는 문제였다. 재귀
또는 브루트 포스
를 정확히 이해하지 못했다면 풀기 어려웠을 것.
순위 검색
자료구조
+이분 탐색
문제였다. 주어지는 정보를 어떤 형식으로 저장할 지 고민하는 능력과 효율적인 탐색 방법을 알고 있는지 묻는 문제였다. 문제 형식이 그리 간단하지 않기 때문에 단순히 개념을 안다고 해서 풀리는 문제는 아니었다. 문제를 많이 접해보고 풀어본 경험이 중요했던 것 같다.
합승 택시 요금
아주 정직한 문제였다. 특정 알고리즘을 알면 바로 해당 유형인지 바로 보이고 풀이도 쉽게 되는 편이었다. 플로이드 와샬
을 이용하는 모든 쌍 최단거리 문제였다.
광고 삽입
문자열
+구현
+투포인터
가 결합된 문제였다. 꼼꼼한 구현 능력과 관찰력이 동시에 필요한 문제라서 꽤 까다로운 편이었다. 위 유형은 모두 접해봤음에도 해결을 못했을 가능성이 있다. 마찬가지로 많은 문제들을 경험했을수록 유리했을 것이다.
카드 짝 맞추기
삼성 코테스러운 다익스트라
문제였다. 이렇게 조건이 많고 더러운 빡구현 문제는 코딩테스트의 단골 유형인데 단순한 개념 공부는 도움이 안되고 비슷한 유형을 최대한 많이 풀어보는게 답인 것 같다.
매출 하락 최소화
처음에 보고 분리 집합
과 백트래킹
이 결합된 문제일 것 같다는 예상만 남겨둔채 풀지 못했는데 막상 인터넷에 올라온 해설들을 보니 트리 DP
문제였다. 발전해야겠다.