[코딩 면접 후기] 혼자서 코딩 면접 준비하기

혼자서 코딩 면접 준비하기

이 포스트에서는 혼자 코딩 면접을 준비하기에 좋은 사이트나 책에 대해서 다룹니다. 제가 코딩 면접을 본 년도는 2018년이고, 회사도 3군데 정도 뿐이라 현재 상황과는 차이가 좀 있을 수도 있겠습니다.


코딩 면접이란

코딩 면접은 말 그대로 주어진 코딩 문제를 시간제한 내에 풀이하는 면접입니다. 여기서 코딩 문제는 대게 알고리즘 대회의 형식을 띠지만 꼭 그런 것은 아닙니다. 가령 다음과 같은 문제는 전형적인 알고리즘 대회 문제 입니다.

“한 번에 점프할 수 있는 길이가 1, 2, 3일 때, 첫 번째 계단에서 N번째 계단으로 이동하는 서로 다른 경우의 수를 구하여라.”

반면에 다음과 같은 문제도 나올 수 있는데, 전형적인 알고리즘 문제는 아닙니다.

“주어진 파일에 대해서 MD5와 같은 해시값을 구현하는 함수를 한 번 만들어보세요”

첫 번째 스타일의 문제들이 코딩 면접의 주를 이루긴하지만 두 번째 유형의 문제도 충분히 나올 수 있을 것 같습니다. 사실 두 문제는 주어진 상황을 모델링하고 이 모델을 해결하는 프로그램을 만든다는 점에서 별반 차이가 없습니다. 문제가 어려워질수록 문제를 이해하는 것조차도 어려워지는데, 그건 모델링이 어려워지기 때문이라고 생각합니다.

코딩 면접의 방식

코딩 면접의 방식은 전화 면접(온라인 면접), 오프라인 면접이 있습니다. 온라인 면접은 대화 방식과 비대화식이 있습니다.

대화식은 전화나 행아웃, 스카이프 등을 통해 면접관과 대화를 하면서 Google Docs 같은 공유 화면 상에서 코딩을 진행합니다. 비대화식은 면접관 없이 특정 시간에 주어진 링크에 들어가서 거기서 제공하는 문제들을 풀고 제출하는 방식입니다. 온라인 면접의 수준은 오프라인에 비해 낮은 편이고, 오프라인 면접에 들어가는 비용을 줄이기 위한 기본 필터링 용도입니다.

오프라인 면접은 대게 온라인 면접 후에 진행됩니다. 면접의 방식은 1 : 1이거나 1 : N이거나 1 : 팀 전체인 경우도 있습니다. 시간도 상이하지만 일반적으로 1시간 이내입니다. 문제를 받고, 어떻게 풀 것인지 설명한 후에 코딩을 하고 어떤 예제들을 통해서 검증할지를 보이면 됩니다.

코딩은 ‘화이트 보드’ 또는 ‘노트북’을 이용하는데 선택이 가능한 경우도 있고, 강제되는 경우도 있습니다. ‘노트북’이 훨씬 유리하지만 ‘화이트 보드’를 선호하는 분들도 계십니다. 이 두 환경 모두 ‘컴파일이 불가능하다’는 특징이 있습니다. 평상시 코딩을 하면서 일단 컴파일을 돌려보고 에러가 나면 그 부분을 수정하는 버릇을 가지고 있으면, 생각지 못하게 여기에서 시간을 잡아먹습니다.

가벼운 실수는 넘어갈 수도 있지만, 알려주지 않고 틀린 구문을 고칠 때까지 요구하는 경우도 있습니다. 구현 상에서 실수한 예외들도 테스트 케이스가 전혀 주어지지 않기 때문에 스스로 발견할 때까지는 알 수 없습니다. 오프라인 면접은 문제가 어려워서보다는 긴장한 나머지 실수에 말려서 떨어지는 경우가 더 빈번할 것 같습니다.

코딩면접의 난이도

코딩 면접은 시간상 크게 어려운 문제를 내기 힘듭니다. 물론 면접관이 목표를 코딩이 아니라 아이디어 제시까지만으로 설정한다면 문제를 매우 어렵게 낼 수도 있습니다. 그래도 ACM이나 올림피아드 출신만 작정하고 뽑겠다는게 아니면 난이도를 어느 수준 이상으로 올릴 수는 없을 것 같습니다.

개인적인 생각으로는 아무리 어려운 문제라고 하더라도 CodeJam Round 1, Topcoder SRM Div1의 Easy 문제, Codeforces Div1의 1,2번 문제 이상의 난이도를 넘어가기는 쉽지 않을 것 같습니다. 단순히 문제를 Submit하는게 아니라 문제를 듣고, 설명, 코딩, 테스트 케이스까지 완성해야하기 때문에 실제 코딩 시간을 20분 정도로 잡아보면 저 정도 난이도도 어려워보입니다.

저는 딱 저 수준 정도만을 쉽게 풀 수 있는 걸 목표로 준비를 했었습니다.


코딩 면접에 도움될만한 사이트

geeksforgeeks

가장 많은 정보가 있는 곳인 것 같습니다. 영어로 되어 있지만 알고리즘에 대한 설명이 정말 깔끔합니다.
여기서 Top 10 Algorithms in interview questions 같은 내용을 정주행하면서 정리하고 관련 문제를 쭉 풀어보면 아주 좋습니다. 면접 현장에서는 레퍼런스를 찾아볼 수 없기 때문에, 단순히 이해하는 걸 넘어서 완벽하게 구현할 줄 알아야하고 꾸준히 복습해서 잊지 않도록 해줘야합니다.

저는 Git을 하나 파서 거기에 위 링크의 알고리즘을 모두 리스트에 적은 후에 모두 구현해보고, 복습으로도 몇 번 돌렸었습니다.

leetcode

거의 모든 면접 문제 기출이 있습니다. 프리미엄으로 결제해야 제대로 쓸 수 있지만 그만한 값을 합니다. 대게 합격자들이 나는 리트코드를 몇 백 문제 몇 천 문제를 풀었다 이야기를 많이 합니다. geeksforgeeks의 알고리즘과 문제들을 다 풀고나면 여기에서 Mock Interview를 눌러 랜덤으로 문제를 받아 실전처럼 풀어보기를 반복하면 됩니다.

문제를 풀고나면 코드가 다른 사용자들에 비해 얼마나 빠른지, 얼마나 빠른 시간에 해결했는지 퍼센타일도 알려주기 때문에 동기부여에도 아주아주 좋습니다.

hackerrank

여기에서도 각종 알고리즘별로 문제를 난이도에 따라 제공하고 있어서 실력을 차근히 올리기에 좋습니다. Editorial도 잘 되어있고 Community도 활발해서 막히는 문제도 정답을 찾아볼 수 있습니다. 난이도가 딱 면접에 좋게 꾸려져있다고 생각됩니다.

프로그래머스

이곳은 한국 사이트인데 카카오 블라인드 채용과 같은 채용형 대회도 개최하고 있습니다. 최근들어 ‘코딩테스트 연습’ 코너가 만들어져서 알고리즘별로 연습할 수 있는 기능을 제공하고 있습니다.

acmicpc

흔히 ‘백준’이라고 알려진 곳인데, 정말 많은 문제들은 정리해놓고 있으며 온라인에서 풀어볼 수 있습니다. 이 사이트의 주인이 만든 회사 code.plus에서 이곳의 문제들을 가지고 강의하는 면접 대비 강의도 아주 괜찮습니다.


코딩 면접에 도움될만한 대회 사이트

Topcoder

탑코더는 주기적으로 SRM(Single Round Match)을 개최하는데, 문제 퀄리티가 상당히 좋은 편. 랭크 점수에 따라서 Div 1과 Div 2로 나뉘는데, Div 2만 다 풀 수 있어도 코딩 면접에서 어려움을 겪을 이유가 없습니다. Editorial이 없는 문제들도 있기 때문에 풀기전에 미리 Editorial 유무를 확인할 필요가 있습니다.

문제는 3개가 출제되며 풀이 시간이 1시간인가 그보다 적었던가 그렇습니다.

Codeforces

러시아 사이트인데 여기도 Contest를 매 주인지 2주인지 자주 개최합니다. 이곳도 Div 1과 Div 2로 나뉘어져있고 특징이 있다면 문제 수가 Topcoder보다 많고 쉽습니다. 대회 시간도 2시간인가 2시간 30분인가 좀 더 깁니다. 대회가 시작되는 순간부터 문제들에 부여된 점수가 줄어드는 방식이라서 어려운 걸 빨리 노려서 먼저 풀면 점수가 더 높습니다. Topcoder도 똑같은 방식으로 점수가 내려갑니다.

Codechef

인도 사이트인데 이곳은 January Challenge 같은 식으로 매우 긴 기간동안 10개 정도의 문제를 푸는 식의 대회를 개최합니다. 어려운 문제일수록 복잡하고 어려운 수학을 요구합니다. 컴퓨팅 용량이 많이 필요한 문제는 잘 안나옵니다. 북한에서도 여기 대회에 참가하는걸 볼 수 있는데 최상위권 랭크에서 볼 수 있습니다.

atcoder

일본 사이트인데 영어를 지원합니다. Beginner, Regular, Grand 세 타입의 Contest를 제공합니다. 문제는 5 ~ 6개씩 나오는데 이 대회의 좋은 점은 Editorial을 PDF로 제공하기 때문에 공부하기에 아주아주 좋습니다.

codejam / kickstarter

구글 코드잼과 킥스타터는 둘 다 구글 코딩 대회. 코드잼은 그냥 아무나 참여하는 대회고 예선부터 파이널 라운드까지 쭉 진행되는 반면에 킥스타터는 대학생을 타겟팅으로 하는데 각각 싱글 라운드로 구성됩니다.

킥스타터나 코드잼에서 좋은 성적을 거두면 리크루터에게 메일을 받을 수도 있습니다. 어느 수준인지까진 모르겠지만 그래도 Round 2까지 갈 수 있으면 못하는 건 아닐겁니다. 킥스타터는 예전엔 쉬웠는데 갈수록 어려워지고 있습니다.

codeground

삼성 SCPC 대회 사이트인데, 최근에는 리뉴얼을해서 연습할 수 있는 기회도 제공하는 모양입니다. 매년 대회를 개최하는데 나가보는걸 추천합니다. 이런 대회의 본선 이력같은 것들이 있으면 이력서에 한 줄 쓰기에 좋습니다.

기타 사이트

카카오 코드페스트, LG 코드 몬스터나 네이버, SK 코딩 대회도 있습니다. 다들 참여해보면 좋고 본선까지 나갈 수 있으면 좋습니다. 본선 이후에는 어차피 넘사벽인 사람들이 많아서 거기서 수상할 때까지 공부하고 노력하는 건 코딩 면접만 놓고보면 쓸데없는 일입니다.


개인적으로 코딩 면접을 준비하는데 딱히 도움이 되었던 책은 없었습니다. ‘코딩인터뷰 완전분석’이라는 책이 유명한데, 괜찮았다고 하시는 분들도 주변에 많은 반면에 저에겐 딱히 도움되지 않았습니다.

주니어에 대해서 도메인 지식을 많이 요구하기 않고 코딩 면접 위주로 선발하는 이유는 모르겠습니다. 추측하기로는 어차피 주니어의 지식은 비슷비슷해서 들어오면 새로 가르쳐야하는데, 빨리 배우고 깊게 이해하는 사람을 뽑기 위해서 그 척도로 코딩 면접을 사용하는게 아닐까 싶습니다.


코딩 면접 후기 – 혼자서 코딩 면접 준비하기