본문 바로가기

해외취업이야기

빅4 IT회사 알고리즘 인터뷰 준비하기


소프트웨어 엔지니어들이 선호하는 빅4, 아마존, 구글, 페이스북, MS. 이 회사들의 인터뷰 방식은 조금씩 차이는 있으나 큰 흐름은 상당히 유사하다. 나는 네곳의 회사와 모두 인터뷰를 보았는데, 구글과 MS는 전화 인터뷰에서 낙방해서 그 이후의 경험은 전무하다. 그러나 인간은 언제나 헛된 희망을 품고 살아가는 존재다보니.. 전화인터뷰 날짜만 잡혀도 이미 페이스투페이스 인터뷰와 연봉협상, 출퇴근 거리까지 줄줄히 알아보며 김치국을 콸콸콸 들이마시게 마련이다. 그러다보니 본의 아니게(?) 적지않은 정보들을 습득했다.


끝까지 완주한 회사는 아마존과 페이스북인데, 난이도의 차이도있고 스타일의 차이도 확실하다. 그러나 준비하는 과정에서 빼놓을 수 없는 부분이 있다. 바로 코딩인터뷰와 디자인 인터뷰이다. 요즘에는 모두들 익숙한 방식의 기술면접이다보니, 따로 설명할 필요가 있을까 싶다. 코딩 인터뷰는, 말그대로 화이트보드 앞에서 프로그램을 짜는 인터뷰이다. 그리고 디자인 인터뷰는 역시 화이트보드 앞에서 시스템 디자인을 하고 분석하는 인터뷰를 말한다. 두 인터뷰는 성격이 너무나 다르고 준비하는 방식 또한 완전히 다르다.


낮은 직급일수록 코딩인터뷰의 수와 비중이 높으며, 더 높은 직급일수록 디자인 인터뷰의 중요성이 높아진다. 그렇기때문에 자기가 지원하는 포지션에 맞게 잘 배분해서 준비하는것이 중요하다.


코딩인터뷰 준비방법


코딩 인터뷰는 알고리즘 인터뷰라고도 불리는데, 중간 난이도의 알고리즘을 이용하여 인터뷰어가 제시하는 문제를 푸는것이다. 푸는 방식은 당연히 코딩이고, 화이트보드에서 코딩을 직접 해야한다. 아마도 화이트보드에서 코딩하는것이 익숙하지는 않을텐데, 연습을 통해 극복해야한다. 이 인터뷰는 무조건 패스해야 하는것이고, 이 인터뷰를 완벽하게 패스한다고 해도 합격이 보장되지는 않는다. 그렇기 때문에 끊임없이 연습해서 완전히 몸에 배도록 해야 한다. 마라톤 준비하려면 매일매일 달려야 하듯이, 이 코딩인터뷰도 매일 빼놓지 않고 꾸준히 해야 실제 인터뷰에서 제 기량을 낼 수 있다.


이론 습득 및 연습


우선 가장 추천하는 웹사이트는 Leet Code이다. 이 사이트에서는 아주 쉬운 문제부터 어려운 문제까지 수많은 코딩 인터뷰 문제를 제공한다. 가장 쉬운 문제부터 하나하나 풀면서 모르는것은 공부하는 것을 꾸준히 반복하다보면, 거의 대부분의 실제 코딩 인터뷰를 문제 없이 풀 수 있다.


https://leetcode.com/


위 사이트가 무료라고 해서 우습게 보지 말고, 하루에 3개에서 5개씩 꾸준히 풀도록 해야한다. 일단 Easy로 되어있는 문제만 모두 푸는것을 목표로 하길 바란다. 다른 지름길은 절대 없다고 감히 이야기 할 수 있다.


실전에서 반드시 기억해야 할 일곱가지

위의 사이트를 통해서 관련 지식들을 습득하고 연습을 충분히 했다고 해도, 실제 인터뷰를 패스 하기는 어렵다 없다. 인터뷰어들은 단순히 문제를 풀수있는지 없는지를 보는것이 아니라, 문제를 단순화 하는 방법, 소통하는 방법, 테스트하고 분석하는것 등을 본다. 그렇기때문에 다음의 여섯가지를 반드시 기억하길 바란다.


문제의 모호한 부분 질문

인터뷰어가 문제를 알려주면, 무조건 세네개 이상의 질문을 해야 한다. 인터뷰어가 주는 문제는 보통 애매모호한 부분에 대한 설명이 없다. 이런 부분에 대해서 확실히 알아내지 않고 바로 코딩을 시작하면 그 인터뷰는 100% fail이다. 우선 문제를 알려주면, 문제가 언급하지 않는것은 모조리 물어봐야 한다. 입력값의 자료 형이나 자료구조, 데이터 크기, 리턴할 값, 예외처리 등..

이런것들을 하나하나 물으며 화이트보드 구석에 적어 놓으면 좋은 인상을 남길 수 있을 뿐만 아니라 문제를 푸는 도중에 유용하게 참고 할 수 있다.


어떻게 풀지 미리 설명할것

내가 이렇게 이렇게 문제를 이해했고, 이러이러한 부가적인 조건들이 있으니, 나는 이러이러한 알고리즘으로 이러이러하게 풀겠다 라고 먼저 인터뷰어에게 이야기 한다. 그러면 인터뷰어가 좋은 생각이다 그렇게 풀어라 하면 보통 그렇게 시작해도 무방하다. 하지만 인터뷰어가 장단점이 무엇인지 다른방법은 없는지 자꾸 묻는다면, 더 좋은 방법으로 풀기를 기대하는것이다. 그때는 자신의 생각을 우기기 보다는 다른 방법이 없는지 인터뷰어와 이야기하며 재빠르게 힌트를 얻어서 생각해 내야 한다. 하지만 아무리 생각해도 다른 방법이 없다면, 본인이 생각한 방법으로라도 풀어야 한다. 이때 최적의 알고리즘을 발견해 내지 못하더라도 대화로 합의점을 잘 찾는다면 희망이 있다.


크게 말하면서 풀기

코드를 작성하기 시작하면 자기가 작성하는 코드에 대해서 크게 말하면서 풀어야 한다. Think out loud 라고 하는데, 내가 생각하는 과정을 인터뷰어가 이해 할 수 있도록 전달하는 과정이다. 이과정은 연습이 많이 필요하기 때문에 매일매일 꾸준히 연습해야 한다.


인터뷰어와 꾸준한 소통

중간중간 인터뷰어가 잘 이해가 안된다고 하거나, 뭔가 확실한지 재확인하는 질문을 하는 경우, 절대로 그냥 지나가서는 안된다. 그 순간 그 인터뷰는 fail이다. 그렇기때문에, 인터뷰어의 말에 귀를 항상 기울여야 한다. 인터뷰어가 이해할때까지 설명해 내는 능력도 필요하고, 잘못된것을 고쳐주려 하면 받아들이는것 또한 필요하다.


테스트

코드 작성을 마치면 반드시 테스트 해야한다. 화이트보드에서 코드를 테스트하는 방법은 매우 다양하므로 인터넷을 검색해 보기 바란다.


성능 분석

이미 1과 2의 절차를 거쳐 코딩을 시작 했다면, 해당 알고리즘이 acceptable 하다는 의미이다. 그러므로, 그부분에 대해서는 염려 할 필요가 없다. 하지만 본인이 선택한 알고리즘의 복잡도와 성능에 대해서 설명할 수 있어야 한다. Big O 를 이용하여 Time Complexity 와 Space Complexity를 설명해야 하는데, 이부분을 틀리면 상당히 큰 감점을 받으니 조심해야한다.


중요하지 않아보이지만 정말 중요한 것: 질문하기

코딩인터뷰를 잘 마치면, 인터뷰가 질문할 기회를 준다. 보통 5분정도의 시간이 주어진다. 이 때 질문을 많이 할수록 좋다. 질문들은 의미있고 흥미로운것일수록 좋으므로 미리 꼼꼼히 10개 정도 준비해 간 후, 상황에 맞게 골라서 질문해야 한다. 질문도 매우 중요한 인터뷰의 과정 이므로 반드시 양질의 질문으로 마무리 지어야 한다



알고리즘/자료구조 공부, 문제 풀이 연습, 연습(mock) 인터뷰 등을 통해서 코딩 인터뷰를 마스터하는것은 빅4 IT 기업 입사를 위한 필수 과정이다. 특히 인터뷰어 경험이 있는 사람과의 가상 인터뷰는 매우 큰 도움이 된다.




이 글은 제가 포쉬포우에 작성한 글입니다.


원본 링크: https://poshpaws.tistory.com/13