카카오 인턴십 코딩 테스트 실전 모의고사 후기
2020년 3월 28일에 시행한 카카오 인턴십 코딩 테스트 모의고사에 참여했었다.
지금은 카카오테크 블로그에 문제와 해설이 올라와있다.
https://tech.kakao.com/2020/04/01/2019-internship-test/
코드를 따로 저장해놨으면 블로그에 풀기가 편했을텐데..
아쉽게도 저장해놓은 것이 없어서 문제를 다시보며 복기해서 후기를 써본다.
문제 1
1번문제답게 매우 쉬웠고, 보자마자 스택 문제라고 바로 떠올렸다.
파이썬에서는 스택을 따로 구현할 필요없이 리스트로 비슷한 기능을 구현할 수 있기 때문에, 10줄 이내로 구현했던 것 같다.
단순히 for문과 if문을 적절히 섞으면 충분히 풀 수 있는 문제였다.
문제 2
튜플 얘기를 계속 하길래 튜플로 푸는 문제인가? 했는데, 입력이 튜플을 가장한 문자이기 때문에 문자열 문제라고 생각한다.
문자열을 분리하여 각 튜플별로 나눠, 등장 횟수가 많은 숫자부터 리스트에 담아 출력하면 된다.
카운트하는 단계부터는 쉬운데, 문자열을 분리하는 작업이 조금 번거로웠다. ' }, '를 기준으로 슬라이싱하여 나눈 후 문자열을 다듬는 형태로 처리했다.
문제 3
이 문제는 어떻게 풀었는지 잘 기억은 안난다.. 아마 banned_id에서 문자열 len이 일치하면, '*'을 제외한 나머지 인덱스를 비교하여 중복되는 아이디를 찾아 처리한 것 같다.
DFS 아니면 BFS도 사용한 것 같은 기억이 있는데,, 중복되는 경우를 피하기 위해 사용한 듯 하다.
이 문제를 통과하긴 했지만, 정확성 말고 효율성도 체크했다면 꽤 힘들었을 것 같다.
문제 4
5개의 문제 중에서 이 문제가 제일 어려웠다. 구현 자체는 어렵지 않았으나, 효율성에서 절반정도 통과하지 못했다.
카카오테크 블로그에 나와있는 해설과 거의 근접한 사고까지 도달했는데, 어디서 잘못 빠져서 헤매다가 시간을 많이 썼다.
처음에는 단순히 문제 그대로 구현했다가 효율성 0점을 받고, 이진 탐색을 사용해서 3개정도 통과했다.
그리고 딕셔너리를 활용하여 해당 방 번호를 방문하면 value를 key에서 하나씩 올려주는 방법도 사용해봤는데, 효율성이 좋지 못했다.
연결 리스트를 만들어 방문 후에 상위 노드로 텔레포트(?) 시키는 방법을 구현하다가, 어딘가에서 꼬여서 정확성까지 깎아먹어 그만두고, 이때까지 시도한 것 중에 가장 효율성이 높은 방법으로 제출했다.
문제 5
정확성은 다 통과하고, 효율성에서 아쉽게 하나 놓쳤다.
올라온 해설을 보니 이진 탐색을 사용하더라.. 생각도 못한 방법이라 신기했다.
처음에는 문제 그대로 구현하고 효율성에서 0점을 받고, 디딤돌의 숫자에 집중했다.
건너뛸 수 있는 숫자가 주어지면 현재 위치부터 그 숫자 안에 있는 디딤돌들 중에 가장 큰 수만 보면 되니까.. 같은 문자열 찾기와 비슷한 형태라고 느껴져 보이어무어 알고리즘을 사용했다.
가장 큰 수들(가능성) 중에 가장 작은 값을 찾아 반환하면 풀리는 문제였다. 다만, 효율성이 이진 탐색보다 별로였나보다.
이렇게 다섯 문제를 푸는 데 2시간 30분정도 걸렸다. 나머지 시간은 4번과 5번 문제의 효율성을 해결하는 데 소요되었다.
이만큼 풀면 과연 인턴십을 통과할지 모르겠지만, 문제가 재미있었고 평소 풀던 문제(DFS, BFS, DP..)와 다른 유형이라 리프레쉬 되는 기분이었다.