전문적인 내용보다는 그 때의 이야기를 쓰고 싶다.
때는 . . . 그러니까 2016년 1월이다.
판교에서 쥬라기 시대로 돌아가 공룡을 잡고 수렵하는 게임을 만든 게임 회사에 지원했을 때 일이다.
당당하게 이력서에 연봉을 딱 적어 내었다.
이 때가 아마 이 기업에 이력서를 4번째 냈던 시기였다.
항상 떨어지던 서류가 초심으로 자기소개서를 작성하니 신기하게도 통과되었다.
서류를 통과하고 두 번째로 온라인으로 시험을 보는 테스트를 치뤘다.
'플랫폼' 분야로 지원해서인지 온라인 테스트의 내용들은 전반적인 신 기술들에 대해서 기본적으로 알고 있는 지
그리고 기본적으로 코딩이 가능한 지, 마지막으로 정답이 없는 문제에 대해 자기만의 생각을 적을 수 있는 지
에 관련된 것이었다.
한 번 된통 깨졌던 경험이 있었기에, 이번에는 정답을 찾기보다 순전히 내가 찾고 분석해서 나만의 생각을 적어내었다.
뭐 그것이 정답이었는지, 아니었는지 모른다.
다행히 통과되었고 다음은 기술 면접 시간이었다.
이 때의 기술 면접에서 전반적인 주제는 최단 거리 찾기 알고리즘이었고 그 중에서도 '다익스트라' 알고리즘이었다.
솔직히 2년이 넘게 지난 지금 이젠 좀 가물 가물하다.
임베디드 쪽으로 공부하신 석사분과 함께 면접을 봤는데,
아무래도 임베디드 쪽이다보니 알고리즘 쪽으로는 기본에만 충실하신듯 하셨다.
그래서인지 자료구조와 알고리즘만 달달 외운 내가 돋보일 수 있는 면접이었다.
그 분께 먼저 질문하고 그 뒤 나에게 '~~씨는 알겠어요?' 라고 되게 젊은 면접관 분이 물었다.
다행히 신기하게도 질문들 하나 하나가 그 당시의 내가 자신있어 하는 부분들
MST, 프림, 크루스칼 등등 그래프 관련 자료구조와 알고리즘이었고 나름 알차게 대답했다.
유일하게 대답 못했던 알고리즘이 아마 A* 알고리즘이다.
지금도 A* 알고리즘은 모른다.
공부할 때 한 번 코드로 작성해봤어야 했는데 미루다보니 못했다. 쩝... 쩝!
아무튼 이 면접의 하이라이트는 다익스트라 알고리즘 이야기가 나왔을 때였다.
기본적인 개요를 설명하고 면접관님의 질문이 '쿡'하고 들어왔다.
(1) 벨만 포드 알고리즘과 다익스트라 알고리즘 차이점은?
(2) 만약 ~~ 상황이 있다면 두 알고리즘 중 어떤 알고리즘을 사용할 것인지?
(3) 방금 다익스트라 알고리즘은 보통 우선순위 큐를 사용한다고 했는데, 그렇게 사용하면 생기는 이점은?
위에 대한 답변은 ... 이젠 진짜 핵심만 기억날 뿐 자세한 원리들은 다른 자료들을 찾아보는 것이 좋다.
확실히 기억나는 것은 이 때의 답변과 면접은 정말 내 면접 경험 중 가장 뿌듯하고 운이 좋다고 생각한 면접이며
이건 떨어질 수 없는 면접이다라고 생각이 든 면접이다.
유일하게 자기소개를 망했었는데 횡설수설 한 바람에 왼쪽 면접관님이 내 자기소개를 듣고 중간에 나가버리셨다.
역시 억지로 날 포장하며 말하는 게 난 너무 힘들다.
이 때 충격으로 그 뒤 면접은 항상 내 소개를 대전에서 온 ~~ 입니다. 잘하는 것은 ~~고 ~~하겠습니다. 라고
항상 짧고 담백한 30초 자기소개를 하게 된 계기가 되었다.
아무튼 면접이 끝나고 흡족한 모습으로 고생했다고 말해주는 면접관님의 모습을 보고 나오면서 내 표정은 밝았다.
그런데 아쉬운 것은 면접비를 챙겨주지 않았다. 그래서 조금 실망하긴 했지만 긍정적인 결과를 기다리고 회사를 나왔다.
그리고 역시나 합격 메일을 보고나서는 쾌재를 외쳤다.
그 동안 노력한 보람이 있다고 느꼈다.
이제 다음 관문은 마지막 관문인 코딩 시험이었다.
이 때 채용 프로세스는 특이하게도 기술 면접 뒤의 마지막 관문이 직접 코딩이었다.
임원 면접이 형식적으로 이루어지는 건지 마지막 관문이라고 말씀해주셨고, 또한 이 코딩은 온라인으로 진행되었는데
4시간동안 ... 어떠한 테스트 케이스도 통과할 수 있는 '다익스트라' 알고리즘을 작성하는 것이었다.
보자마자 난 행복했다.
다! 익! 스! 트! 라! 라니.
이건 완전 날 뽑기 위해서 낸 문제인가?
그렇게 내가 맘에 들었나?
라는 실없는 상상을 하면서 열심히 시험에 임했다.
그런데 시험 과정은 순탄치 않았다.
먼저 장소가 안좋았다.
무슨 배짱인지 항상 집에서 조용히 온라인 테스트를 치루던 것과 다르게
그 때에는 카페에 가서 시험을 쳤는데, 충분히 이어폰으로 막을 수 있을 것이라 생각했던 사람들의 대화 소리는
'슝슝' 뚤렸고 집중도 풀리고 완전 힘들었던 시간이었다.
오죽하면 2시간 뒤에 시험 도중에 빠르게 택시타고 집에 와서 다시 시험을 쳤으니까.
(절대 카페에서 코딩 온라인 테스트는 치루지 말자!)
그 때의 나는 C++ STL을 공부하지 않았기 때문에 C++ STL을 사용할 수 없었다.
항상 내가 공부하면서 만들어 두었던 나만의 자료구조 코드를 가지고 시험을 쳤었는데
지금 생각하면 내가 항상 코딩 온라인 테스트 탈락했던 이유 중 하나다.
C++ STL을 쓰면 한 줄이면 끝나는 코드를 내 자료구조를 쓰면 오류를 수정하는데 2시간이나 걸렸으니까.
정말 얕봤다가 멘붕의 시간을 경험하게 했던 코딩 테스트였다.
내가 만든 '우선순위 큐'는 완전 쓰레기 같아서 다익스트라 알고리즘 결과가 샘플 테스트 케이스조차 통과하지 않았다.
그런데 모든 테스트 케이스에서 통과라니.
아마 마지막에 내가 제출한 알고리즘은 메모리 오버플로우로 터져버렸을 것이다.
아무튼 4시간 동안 간신히 내가 만든 자료구조를 사용하여
샘플 테스트 케이스를 통과하는 다익스트라 알고리즘 코드를 완성할 수 있었다.
이 때 진짜 뿌듯했다.
말도 안되는 업적인 줄 알았다.
또한 다른 사람들이 STL을 사용할 때 나는 내가 만든 것을 사용했으니 더 가산점을 받겠지?
라는 미친 생각을 하며 나도 드디어 취업하는구나 하며 행복한 일주일을 보냈다.
결과는 당연히 탈락.
주석도 없고, 코드 정리도 못하고, 불안정한 자료구조에, STL을 사용하지도 않고,
코드 길이는 몇 줄이면 될 것을 초 장문 코드를 작성하여 냈으니
오직 샘플 테스트 케이스에서만 돌아가는 다익스트라 알고리즘의 탄생이다.
이제와서 돌이켜보면 개발자에게 코딩 테스트의 탈락은 의심할 여지도 없는 실력 부족인 것 같다.
물론 운도 있을 수 있겠지만, 나중에 보니 그 때의 난 당연히 탈락했어야 하는 실력이었다.
부끄러울 정도로.
물론 이 경험들이 모여서 나중엔 결국 취업 관문을 이겨낼 수 있게 만들었지만.
그러니 지금도 항상 부족함을 안고 살자.
지금의 날 지켜보는 내 선배님과 팀장님 입장에서는 난 아직도 병아리일테니까.
- 다익스트라 면접 일기 끝 -
'테크 > C++' 카테고리의 다른 글
[내가 받은 C++ 기술면접 질문들] - 스마트포인터의 존재 (6) (2) | 2019.09.07 |
---|---|
[내가 받은 C++ 기술면접 질문들] - Bubble Sort와 Quick Sort 일화 (4) (7) | 2017.05.28 |
[내가 받은 C++ 기술면접 질문들] - malloc()과 new의 차이 (3) (9) | 2017.05.28 |
[내가 받은 C++ 기술면접 질문들] - 소멸자의 virtual 키워드 (2) (8) | 2017.03.18 |
[내가 받은 C++ 기술면접 질문들] - 개요 (1) (2) | 2017.03.18 |