[프록로그]

일주일 전쯤에 1차 Onsite Interview를 보고 나서 오늘 2, 3, 4차 Onsite Interview를 봤습니다. 구글 코리아 SW Engineer의 경우에는 총 4번의 Interview를 진행해야 한다고 합니다(다른 직종이나 다른 Branch는 잘 모르겠습니다). 예전에, 제가 구글뿐 아니라 다른 회사도 면접을 진행하고 있다고 Recruit Coordinator에게 얘기를 했었고, 그래서인지 Interview 진행을 빨리 할 수 있도록 해 주겠다고 했습니다. 그래서, 덕분(?)에 오늘 2차, 3차, 4차 면접을 쉬지 않고 완빵에 진행을 했습니다.

1명의 Interviewer에 각각 50분씩, 중간에 10분씩 휴식 시간을 가지고 Interview를 진행했습니다. 하루에 3개의 Interview를 동시에 진행하고 나니 (예상은 했지만) 완전 체력 소진이 되어 버리더군요. Interview를 진행하고 나서 집에 오는 도중에 오늘 받은 문제들을 생각을 해 봅니다. 3문제 모두 정답을 알고 있더라면 모두 짧은 시간안에 정답을 얘기할 수 있는 문제임에도 불구하고 Interviewer의 문제를 제출 의도를 파악하지 못하여 시간이 질질 끌릴 수 밖에 없었습니다. 으흑,  후회막급. ㅠㅠ

오늘 진행한 2, 3, 4차 Interview에 대해 얘기를 해 보겠습니다.


[2차]

2가지 문제가 주어 졌습니다.

첫번째 문제는 Binary Tree와 관련된 간단한 문제였습니다. 정답을 도출하는 방식은 Left Node와 Right Node의 값을 비교하여 큰 값을 취하는 전형적인 Recursion문제였습니다. 그런데 Interviewer의 의도롤 제대로 파악을 하지 못하여, 소스 코드가 엉망이 되었습니다. 대충~ 입으로 설명을 하였지만 깔끔한 코드의 작성에는 실패. 나중에 Interviewer가 "이러한 방식을 사용하면 쉽게 해결할 수 있지 않나요"라는 말을 했습니다. "그러게 말입니다."라고 대답할 수 밖에 없었죠. ㅠㅠ 집에 오면서 곰곰히 생각해 보니 10 line 정도로 깔끔하게 작성이 가능함을 뒤늦게 알아 냄. " 후회막급.

두번째 문제. 이것도"머리가 하얘 지는 문제".
NxN Matrix에서 특정 값을 뽑아 내는 문제였습니다. 원래 이런 문제를 받았을 때 대번에 해결 방식을 얘기하는 사람은 정말로 머리가 좋은 사람일 것입니다. 저는 그 정도 레벨은 절대 될 수가 없기 때문에 일단 N=2, N=3인 가정에서 A4 용지에 이래 저래 그려 가며 고민을 하다가, 나중에 가서 "이렇게 하면 되겠군요"라고 대답을 하였습니다. 문제 출제의 의도는 대충 파악이 되었던 것 같습니다.

그 다음에, Interviewer는 pseudo 코드 작성을 요구하였으나, 시간도 없고, 첫번째 문제에서 버벅거렸는 지라 당황을 해서 pseudo 코드 작성까지 하지는 못했습니다. 결국 나중에 가서는 제가 제시한 방법에 대한 time complexity 정도를 물어 봤었고, "n(log n) 정도가 되겠군요"라고 대답만 하였습니다.

암튼 2차 Interview는 code 작성에는 접근조차 하지 못하였고(어리버리했고), 말로만 떼울 수 밖에 없는 정도로 마무리되었습니다.


[3차]

Binary Search를 응용한 문제. 하지만 Binary Search 코드를 시험 칠 때 처럼 달달 외워서만은 절대 풀 수 없는 문제였습니다.

G(이경문) : "어, 이렇게 관련 Node를 일단은 찾아 낸 다음에, 앞으로 retrieve 죽~ 하고, 그 다음에 오른쪽으로 retrieve 죽~하고..."
I(Interviewer) : "그러면 time complexty는 어떻게 되죠?"
G : "음... 앞뒤로 retrieve를 해야 하니까, O(n)이 되겠죠."
I : "Binary Search 구조의 의미가 무색해 지자나요."
G : [당황] "그러게요..."
I : "일단 Binary Search 코드를 먼저 적어 보세요."
G : [A4 용지에 적어 관련 코드를 적어 봄].
I : "이걸 조금 변형하거나 추가해서 할 수 있는 방법을 모색해 보세요."
G : "아하, Binary Search 코드를 약간 수정해서 left 조건을 만족하는 node와 right 조건을 만족하는 node를 찾을 수 있을 것 같아요."
I : "그 코드를 컴파일이 될 수 있는 레벨로 작성해 보세요."
G : [A4 용지 3장에 걸쳐 코드를 작성하여 제출함]
I : [내가 작성한 코드를 유심히 살펴 보면서도, 잘못된 곳을 지적하지는 않음.]
G : "아, 죄송합니다. 여기 부분 잘못되었어요."
I : "아, 네, 그렇네요..."

3차 인터뷰는 Interviewer의 의도를 그대로 잘 따라 간 것 같습니다. 중간에 함정에 빠져서 어리버리했었지만, 그 함정에 빠지는 것도 문제의 해결 방안 도출을 위한 하나의 과정으로 보여 집니다. 하지만, 집에 돌아 오면서 생각을 해 보니, 내가 작성한 코드의 critical error가 있다는 것을 발견했습니다. 절대 작동할 수 없는 코드. 아~ 후회막급.


[4차]

이 문제는 현업에 있으면, 실제로 한번 정도는 고민해 볼 수 있는 문제였습니다(특히 서버쪽 개발을 담당하였다면). 하지만, 이쪽으로 곰곰히 생각을 해 본 적이 없어서 제대로 된 대답을 하지 못하였습니다. Interview를 거의 10분 정도 남겨 두고, 문제 출제의 의도를 파악하게 되었으나, 시간이 부족해서 제대로 된 코드의 제시나 개선 방향에 대한 얘기는 하지는 못하였습니다.

이 문제도 집에 오면서 곰곰히 생각해 보니, Lock(Critical Section) 처리나 Dynamic Array 없이도 아주 간단하고 심플하게 주어진 문제를 해결할 수 있는 방법이 존재함을 알아 내었습니다. 하지만, 나중에 생각나면 뭐합니까? 정답을 Interviewer 앞에서 얘기를 했었어야 하는데... 후회막급.


[에필로그]

Interviewer들 모두 직급이 자신이 SW Engineer라고 하였음. 직급상으로 상관(?)으로 보이지는 않았고, 나이도 전부 나랑 비스무리해 보였음. 

2, 3, 4차 문제 모두 전부 집에 오면서(지하철 타고 오면서) 문제의 출제 의도가 파악이 되었고, 왜 그러한 문제를 내었는지 뒤늦게야 이해가 되었음.

결국 오늘 Interview에서는 모두 Interviewer에게 만족할 만한 정답을 제시하지는 못하였음.

문제를 자꾸 생각하면 할 수록 제대로 된 대답을 하지 못해서 후회가 듬. 하지만 그러면 뭐하나, 이미 떠난 배인데... 자꾸 후회막급이라는 단어 밖에 생각이 안남.

일주일 뒤에 결과를 알려 주겠다고 함. 이번에는 아무래도 떨어 진 것 같은데,  결과에 대해 후회하지 말자. 그냥 최선을 다 했다고, 좋은 경험 했다고 생각하자.



ps : Interview 이전에 Desk에서 대기하면서 찍은 사진 올려 봅니다.
 
P20120329_133635000_1000000204.JPG 
P20120329_133707000_1000000205.JPG 
P20120329_133735000_1000000207.JPG 
P20120329_135544000_1000000208.JPG 

마지막 사진은 면접시에 코드를 적어 내려 가야 하는 공포(?)의 화이트보드.