기타/아무말

2021 카카오 블라인드 채용 지원 후기

VSFe 2020. 11. 7. 00:37

 

사실 블로그 운영하려고 했는데 바빠서 (신분이 군인이기도 하니까...) 블로그를 완전히 놓고 있었는데, 뜻깊은 기회를 이렇게라도 글로 남기고 싶어서 다시 블로그를 꺼냈다. 이제 말년휴가 시작이기도 하니까 이걸 계기로 블로그를 다시 시작해보고 싶다.

 

검색으로 들어오신 분들을 위해 결과만 말하자면, 1차 인터뷰에서 떨어졌다.

 

그래도 아쉽거나 하지 않은건, 제대로 공부를 시작한지 (속사정 길게 이야기하면 너무 TMI 일 것 같음 ㅎㅎ;;) 반년도 안되었던 입장이었고, 그냥 1차 코딩테스트 문제 맛보기 하고 싶어서 지원한게 여기까지 왔다는걸로 정말 만족스러웠기 때문일까?

 

개인적인 이야기는 글 중간중간에 이야기 하는걸로 하고, 글의 본 목적인 후기를 풀어보겠다.

 


1차 온라인 코딩 테스트 (9/12)

군대 입대하기 전에 컴퓨터 관련 학과를 복수전공 하고 있었는데, 사실 이쪽으로 갈거라는 생각은 전혀 하지 않았다. 그냥 내가 코딩을 못했기 때문에... 군대에 입대하고 1년간 띵가띵가 놀다가 코로나 때문에 휴가가 막혀버리는 바람에, 부대에서 할 수 있는게 없을까? 라는 생각에 코딩 실력이나 키우겠다고 백준을 풀기 시작했다.

 

3개월동안 300문제 정도 미친듯이 풀다보니까, 자신감이 생기기도 하고 본전공보다 이쪽이 더 즐겁다는 생각이 들었다. 그래서 홧김에 면접 보고 전과를 해버렸는데, 지금 생각해보면 홧김에 한거지만 정말 잘 선택한 것 같다.

 

아무튼, 카카오에 지원한건 별 이유가 없었다. 애초에 모집 안내문에 '군필'이라는 말이 명시되어 있기도 했고, 전역해도 학교 복학하면 3학년이었기 때문에 그냥 경험을 쌓는게 목적이었기 때문이었다. 시험 일정이 맞고, 서류가 없었다면 다른 회사도 썼을 것이다. (TMI지만, 교대근무를 하다보니 주말에 시험을 본다고 다 응시 가능한게 아니었다.)

 

당시는 광복절 집회로 인한 군장병 휴가 통제기간이었고, 당연히 시험 보고 싶다고 부대 밖으로 나갈 수 있는 상황이 아니었다. 그래서 그냥 사지방에서 풀었다.

 

(각 문제의 코드는 프로그래머스에 문제가 공개 된 이후에 업로드 하겠습니다.)

 

#1

필요한 알고리즘/주제: 문자열

주어진 텍스트에 7단계의 쿼리를 수행하는 문제였다. 7단계라고 해봤자 문자 빼고, 더하고 하는거라 전혀 어렵지 않았다.

문제를 보자마자 문자열 처리라는걸 깨달았고, 바로 파이썬으로 언어를 변경해서 문제를 풀었다.

 

#2

필요한 알고리즘/주제: 문자열, 조합

주어진 여러 문자열에서 동일하게 나오는 조합을 꺼내는 문제였다.

각각에 문자에 대해 문자열 내부에서 정렬을 해주고, 가능한 모든 패턴을 꺼내 (next_permutation을 사용했다.) 힙에 넣으면서 카운팅했다.

 

#3

필요한 알고리즘/주제: 해싱, 이분탐색

각각의 조건에 맞는 인원의 수를 추출하는 문제다.

다만 DB 처럼 특정 조건은 스킵할 수 있다.

조건이 처음부터 주어져 있으므로, (좋아하는 OS는 뭐냐, 치킨/피자, 기술 스택 등등...) 미리 1대1 대응하는 배열을 만들어두고 인덱스 번호를 매칭했다.

이렇게만 하면 정확성 테스트는 통과할 수 있는데, 효율성 테스트를 통과하기 위해서는 점수 ~~점 이상/~~점 이하 이런 부분을 lower_bound를 통해 처리해줘야 한다.

 

#4

필요한 알고리즘/주제: 플로이드 워셜 or 다익스트라

목적지가 다른 A와 B가 같은 이동수단을 타고 함께 이동하고 특정 지점에서 나뉘어서 이동할 때, 어떻게 이동해야 총합 거리를 줄일 수 있을까? 라는 문제였다.

즉, (출발지에서 A와 B가 함께 이동하는 거리) + (분기점에서 A의 목적지까지 거리) + (분기점에서 B의 목적지까지 거리)를 최소로 만들어야 한다.

문제를 처음 보고, 바로 플로이드로 풀어버렸다. 3번보다 훨씬 짧은 시간에 풀었다.

물론 플로이드 워셜을 몰라도 다익스트라를 여러 번 사용하면 풀 수 있다. A의 목적지, B의 목적지, 출발지점은 고정되어 있으므로, 각각 다익스트라를 사용한 다음에 1~N까지 루프를 돌리면서 계산하면 된다.

 

#5

필요한 알고리즘/주제: 부분합

사람들이 영상을 특정 구간만 시청한다고 할때, 그 범위를 시:분:초 ~ 시:분:초로 준다고 하자. 가장 많은 사람들이 볼 수 있도록 광고를 삽입하면, 어떤 구간에 삽입해야 할까? 라는 문제였다.

하필 시:분:초 이런식으로 줘서 첫 전처리부터 조금 그랬다.

고민끝에 아예 초로 변환시켜버렸고, 범위가 100시간이니 이걸 초로 변경하면 360000이니까, 배열로 나타낼 수 있을 것 같았다.

또 이게 보면 시작시간 자체는 포함되지 않고, 종료시간은 포함이 되어서 더 헷갈렸다.

결국은 배열을 두개 만들어 풀었는데, 첫번째 배열은 각 영상의 시작시간을 가리키는 인덱스에 +1, 종료시간을 가리키는 인덱스에 -1 하여 시간 참조 배열로 만들었고, 두번째 배열은 첫번째 배열을 훑으면서 부분합으로 만들었다. 이후 부분합 배열을 쭉 훑으면서 15초간 가장 많은 사람이 시청한 시간대를 찾아냈다.

 

#6

필요한 알고리즘/주제: 시뮬레이션

딱 보고 엄청나게 귀찮은 문제가 될거라는 생각이 들었다.

어차피 구현 문제는 하나정도 나올거라고 생각했기에, 당황하지 않고 차근차근 풀었다.

이동 자체를 구현하는건 어렵지 않으나, 모든 경우의 수를 고려해야했다.

다만 모든 경우의 수가 6! * 2^6 정도이기 때문에, 모든 케이스를 전부 계산해도 시간초과가 나지 않는다.

따라서 순서를 지정해주기 위해 next_permutation으로 섞어주고, 추출된 케이스를 기반으로 함수 호출을 해서 답을 구했다.

아이디어 자체는 어렵지 않으나 노가다성이 짙은 문제라 코드 자체는 가장 길었다.

 

#7

필요한 알고리즘/주제: Tree DP

다이나믹 프로그래밍을 사용하되, 트리의 구조를 이해해야 풀 수 있는 문제이다.

부모와 자녀가 모두 선택되지 않는 경우가 없어야 하는데, 트리의 구조를 활용해서 이런식으로 케이스를 나눌 수 있다.

부모를 선택하는 경우 -> 모든 경우가 가능 (일반적인 DP 처럼 모든 경우를 고려하면 됨)

부모를 선택하지 않는 경우 -> 자녀가 모두 선택되지 않는 경우'만' 제외

 

즉, DP 테이블을 자신을 선택하는 경우/선택하지 않는 경우로 분리할 수 있도록 2차원 테이블로 구성하면 되고, dp 계산 함수에서 플래그가 0인지, 1인지에 따라 자녀가 모두 선택되지 않는 경우만 골라내면 해결할 수 있다.

 

5시간 30분 (중간에 서버 문제로 인해 30분이 추가되었다.) 동안 시험 보는게 너무 힘들었다. 어차피 온라인이기도 하니까 그냥 시험 보다가 밖에 나가기도 하고 밥도 먹고 침대에 눕기도 하고 했는데, 결국은 이런 시험을 볼 땐 개인의 컨디션 조절이 가장 중요할 것 같다.

 

2차 온라인 코딩 테스트 (9/26)

사실 2차 보기전엔 두려움이 앞섰다. RESTful API를 사용해 본적이 없었기 때문이다. (프론트 공부를 조금 해서 뭔지는 알고 있었지만, JS를 제외하고 다른 언어에서 데이터를 받아와본적이 없으니까...) 또, 타과생이기도 했고 2학년까지만 학교를 다녀서 OS, DB, 네트워크 같은 전공지식이 하나도 없다는 것도 문제였다.

 

일단 CS 테스트 대비를 위해 전공과목 요약본 어떻게 만들어서 죽어라 공부했다. 이러다보니 정작 2차 시험은 RESTful API 사용 코드 미리 만들어 둔 것 빼면 거의 준비를 못 했다...

 

웹캠을 사용해야 해서 이전처럼 사지방에서 보는건 보안위규상 문제가 되었고, 간부님들과 상의한 끝에...

...

간부님 숙소에서 봤다...

 

CS 테스트는 쉽게 나왔다.

실제로 저 5분야의 문제가 모두 나왔지만, 솔직히 1차 코테 통과할 실력이면 자구/알고리즘 틀릴리는 없고,

OS/DB/네트워크는 기본적인 내용만 출제되었다.

 

본격적인 코딩테스트. 문제 설명만 A4용지 3~4페이지 급으로 나왔다.

특별한 언어제한은 없고, 자신이 원하는 언어로 작성한 다음에 파일 첨부하면 된다.

어차피 코드 돌리면 점수도 같이 나오고, 그 점수가 채점으로 들어간다.

 

N*N 사이즈의 격자점에 대여와 반납이 계속해서 발생하는 대여소들이 있는데, 트럭을 스케쥴링해 대여 취소 (원하는 대여소에 대여할 수 있는 물건이 없을 때)의 횟수를 최소화하는 방법을 고안해야했다.

 

1번 문제는 N이 작아서 트럭을 상하로 반복 이동 시키면서 처리하면 해결되는데, 2번 문제는 N의 크기가 매우 컸다. 따라서 단순하게 트럭을 이동시키는 방식으론 5%도 처리할 수 없다. 그런데, JSON 데이터를 통해 2번 문제에서 대여와 반납이 자주 발생하는 핫플레이스를 찾을 수 있다. 이걸 활용하지 않으면 고득점을 낼 수 없는 문제였다.

 

JSON 데이터를 분석하면, 가장 많이 대여/반납이 이뤄진 곳과 가장 적게 이뤄진 곳은 최대 60배 가량 차이가 나는걸 확인할 수 있다. 전체 구역을 2*2구역으로 분할하여 가장 많은 대여가 이뤄진 핫플레이스와, 가장 많은 반납이 이뤄진 또 다른 핫플레이스를 왕복으로 이동하되, 트럭은 여러대이므로 파이프라이닝처럼 구현하려고 했다.

 

문제는 근무를 들어가야 해서 시험을 오래보지 못했다는 점인데, 시험 종료 1시간 30분을 남기고 나가는 바람에 2번 코드를 작성하다 중간에 다 지워버리고 제출했다.

 

전체적으로 상황을 판단하고, 시뮬레이션 할 수 있는 아이디어가 필요한 시험이었다. 더불어, 구체적인 상황을 판단하기 어렵기 때문에 실수없이 꼼꼼하게 구현하는 것도 정말 중요하다. (테스트케이스의 정답 유무를 판단할 수 있는 일반적인 코테와 달리, 2차 코테는 한번에 처리해야 할 데이터가 엄청 많고, 하나하나의 정답 유무가 아닌 최종 점수만을 표시하기 때문에 더욱 어려운 점도 있는 것 같다.)

 

2차 코딩 테스트 합격, 그리고... 

사실 1시간 30분이나 일찍 제출했기 때문에 2차 시험을 탈락한 줄 알았다. 거기에 합격자 발표가 꽤 오래 걸려서 잊고 살고 있었다.

 

어느날 휴가 복귀 전에 미용실에서 머리 자르고 있었는데, 메일이 하나 날아왔다.

 

??????????????????????????

 

합격 메일을 받았을 때, 합격해서 기쁘다는 생각보단 당혹스러운 생각밖에 없었다.

솔직히... 면접을 볼 생각이 없었고, 면접 보기도 싫었기 때문이다.

1차 인터뷰는 기술 면접인데, 2학년 밖에 안 다닌, 그것도 본전공도 아닌 사람이 뭘 알겠냐. 어차피 면접 가봤자 면접 내내 탈탈 털리고 욕먹을게 분명한데 가면 무슨 의미가 있겠냐. 라는 거였다.

그리고, 뭣보다도 전역일이 입사 예정일보다 늦다. 

 

어떻게 포기메일을 보내야 하나 하면서 메일을 계속 읽었는데,

 

3. '미리 만나는 카카오' 행사 안내 

카카오 소개와 함께 향후 진행되는 인터뷰 전형에 대해 안내드릴 예정으로, 가능하시다면 참석하시기를 권장합니다. 

단, 개인 일정으로 해당 행사에 참석하지 못하시더라도 채용 상 불이익은 전혀 없습니다. 

- 일정 : 10월 19일(월) 오후 4시 ~ 5시 30분 

- 장소 : 온라인 진행 (카카오TV 라이브로 진행) *라이브 채널 링크는 내일(16일) TMS로 전송될 예정입니다. 

- 행사 소개 : 카카오 기업 소개, 일하는 문화/복지제도/공간소개, 2021 신입공채 후속 전형 안내 

 

라는 내용이 적혀있었다.

원래는 면접 방문하면 회사 공간을 일부 개방하는걸로 아는데, 온라인으로 전환되었으니 이런식으로 방송을 진행하는 것 같다. 해당 방송은 비공개로 진행되었으나, 이후 카카오TV에 영상 전체가 업로드되었다.

 

tv.kakao.com/channel/3634426/cliplink/413455653 여기서 볼 수 있다.

 

사실 2학년만 마치고 군대에 와서 그런지, 사회에 나가서 무엇을 해야할지에 대한 고민을 많이 해보지 못했다. 회사라는건 나에겐 아직 낯선 존재였는데, 방송을 보면서 동기부여가 엄청나게 되었다. 앞으로의 목표가 생긴 느낌이었다.

 

아무튼 방송 다 보고 바로 포기메일을 보냈다.

 

안녕하세요. 카카오 Infra 부문으로 카카오 블라인드 채용 2차 온라인 코딩테스트에 합격한 @@@입니다.

 

저는 현재 군복무 중입니다.

오늘 미.만.카 방송에서 예정 취업일이 12월 21일로 나와있었는데, 예정 전역일이 해당 날짜 이후라 정해진 날짜에 출근이 불가능할 것 같습니다.

따라서 추후 프로세스에 합격한다 하더라도 정상적인 출근이 불가능하기 때문에, 이번 2021 블라인드 채용을 포기하려고 합니다.

 

좋은 기회주셔서 다시 한 번 감사드립니다.

 

얼마 지나지 않아, 카카오측에서 전역일을 묻는 메일을 보냈고, 답변을 하니 이번엔 잔여 휴가일을 묻더라. 거기까지 답변을 하니...

 

안녕하세요 @@@님.

 

12/21 입사부터 전역일 전 주 금요일 (1/8)까지 워킹데이는 15일로 확인됩니다. 

만일 최종합격 하시게 되면, 전역일 당일은 휴가 또는 근무 스케줄 조정이 가능하시지 않을까 합니다. 

 

적체된 15일을 입사 이후에 모두 사용하셔서, 카카오 입사 및 교육일정에 참여하실 수 있고, 

1/2차 인터뷰 참석이 가능하시다면, 포기하시는 것보다는, 우선 공채 프로세스 진행에 도전해보시는 것은 어떠실지 조심스럽게 권해드려봅니다. 

 

고민해보시고 내일 오전까지 회신 부탁드리겠습니다.

 

도전해보라는 메일에 굉장히 내적 갈등이 심해졌다. 주변 친구들은 대부분 관련 없는 분야이기도 하고, 아직 사회생활을 하는 사람도 많이 없어서 물어볼 사람이 많이 없었다. 그래서 알고리즘 공부를 하기 위해 들어갔던 오픈카톡방에 조심스럽게 물어봤는데, 수많은 사람들이 꼭 도전해봐라, 털려도 좋은 기회일 것이다. 등의 격려를 많이 해줬다. (그때 조언해주신 많은 분들 정말 감사합니다.)

 

그래서 고민끝에, 일단은 부딪혀보기로 했다.

 

1차 인터뷰

우선 카카오는 1차 인터뷰 직전에 서류를 작성한다.

블라인드 채용이기 때문에 학력, 나이, 성별등의 내용은 기재할 수 없다. 심지어 포폴을 첨부할 때 깃허브 프로필 같은데에 자신의 학교가 명시되어 있다면 이것도 지워야 한다.

 

별개로 개인 포트폴리오나 프로젝트 경력은 기재할 수 있는데, 난 그런 경력이 하나도 없었기 때문에 스스로 위축되었다.

 

카카오 기술면접에 대한 정보가 너무 없어서 무엇을 공부할까 고민을 많이 했다. 작년 2차 면접은 토론식 면접이었으나, 올해는 다시 일반 기술면접으로 회귀한다고 했다. 그래서 고민끝에 결국 CS 공부를 다시 했다.

 

면접은 코로나 때문에 온라인으로 진행했고, 어떻게 어떻게 해서 나가서 면접을 봤다.

면접관은 2명, 정해진 시간에 링크에 들어가면 면접을 진행할 수 있었다.

면접 시작 전에 면접관들이 자신을 소개하는데, 역시 카카오라 그런지 영어 이름으로 자신을 지칭하더라.

 

면접 질문을 여러개 받았는데, 기억나는 것만 적으면 다음과 같다.

- 2차 코딩테스트의 자신의 코드 설명

- DBMS란 무엇인가?

- 스키마를 사용하는 이유는?

- 정규화가 무엇인가?

- 정규화의 특정 모델에 대하여 (예시를 통해 설명)

- 로킹은 무엇인가 + 로킹의 단계에 대해 설명

- 트랜잭션에 대하여

- 세마포어와 뮤텍스의 차이점은?

- Swap은 어떤 이점이 있는가?

- 사용해 본 리눅스를 물어본 뒤 - 해당 리눅스가 다른 리눅스 배포판과 구별되는 점은?

- TCP 연결 형성 과정 (3-way Handshaking)

- 공인 IP와 사설 IP의 차이점은?

- 데드락의 발생조건

 

솔직히 잘 대답하진 못했다. 거의 벼락치기식으로 공부하다보니 막상 설명할때 말이 안 떠올라서 고민을 꽤 했다.

 

기술질문이 끝나고 약간 시간이 남았는지 개인 정보에 대해 약간 질문하셨다. 지원할 때 미필로 체크하고, 전역 예정일을 명시해달라고 카카오측에서 말해서 해당 내용을 기술한 것도 있고, 경력이 적지만 짧은 경력에도 2차 코딩테스트를 합격했다 라는 점을 명시해서 그런지, 이런 부분을 흥미롭게 보셨다.

 

마지막으로 면접관에게 묻고 싶은것이 있냐고 했는데, 스스로 떨어질 것 같다는 걸 이미 실감했기 때문에 다음과 같이 말했다.

 

"면접관님과 지원자의 관계에서 벗어나서, 선배 개발자분으로써 해주실 수 있는 조언이 있나요?"

 

면접관님이 회사 차원의 조언을 원하는지, 아니면 개인적인 조언을 원하는지 물었고, 난 후자를 선택했다.

정말 감사드리게도, 남은 시간동안 열심히 조언을 해주셨다.

 

그리고 다음주 즈음에, 결과가 나왔고 뭐 예상했듯이

떨어졌다.

 

더 나은 사람들이 2차까지 갔을거라고 생각한다.

후기

글을 2편으로 나눌 걸 그랬다. 쓰고 보니 엄청 길어진 것 같다...

 

군복무 중인 사람이 카카오 같은 회사에 지원한 사례를 몇 번 보긴 했지만, 나처럼 조금 드라마틱한 과정을 거친 사람은 많이 없는 것 같다.

 

사실 글을 쓰게 된 이유도 이런 경험을 글로 남기고 싶어서였고, (물론 블라인드 2차 면접 후기가 정말 없다는 것도 이유 중 하나다.) 누군가 이걸 보면 도움이 되지 않을까? 라는 생각을 하면서 글을 쓰게 되었다.

 

단순한 회사 지원 과정일 뿐이지만, 개인적으론 엄청나게 많은걸 배웠고, 앞으로 어떤 길을 걸어나갈지에 대해 고민해보고, 설계하는 시간이었다. 비록 탈락했지만, 이 경험은 나 자신에게 있어서 엄청난 밑거름이 될거라고 본다.

'기타 > 아무말' 카테고리의 다른 글

첫 글...  (0) 2020.06.21