[美유학생의 글로벌 기업 인턴면접후기]인턴 하려면 코딩 문제부터 풀어야…실수로 정규직 문제 내줘

제가 경험한 아마존 면접에 대해서 간략하게 설명하겠습니다.
아마존이 뭐 하는 회사인지는 다들 잘 아실꺼라고 생각합니다.
여름방학이 끝날 쯤 아마존 리크루터에게서 링크드인 메시지가 왔습니다.
"Interested in working at Amazon? We think you'd be a good fit! If so, we have had a recent process change, any candidate interested in Amazon will be conducting a coding exercise (Link below). We have found that this test to be a solid technical assessment.
The coding exercise includes two coding questions and you will have 120 minutes to complete.
Once completed the solutions will be assessed and we will decide if we are inclined to invite you for an in person interview. We will be hosting an interview event in Chicago at the end of this month and would be happy to meet with you then.
I know this is kind of out of the blue but if you have any questions at all please do reach out but otherwise please take a few days to complete the test and let me know that you have conducted the test so that I can look out for your results."
"아마존에서 일하는거에 관심 있니? 최근 아마존에서는 채용 프로세스에 변경이 있었어. 아마존 (소프트웨어 엔지니어) 지원자들은 코딩 시험을 먼저 치루게 될꺼야. (링크 참조) 이 테스트가 기술 역량 평가에 쓰기 괜찮은 것 같아.
독자들의 PICK!
코딩 시험은 두 문제로 이루어져 있고 총 120분의 시간이 주어질꺼야.
다 끝내면 답을 평가해서 만나서 면접을 보게 될지 알려줄께. 이번달 말에 시카고에서 면접 이벤트를 진행할 예정인데 거기서 보면 될꺼야.
뜬금없이 연락했다는 거 알고 있지만 만약 궁금한 점이 있다면 연락하고, 아니면 다음 며칠 사이에 시험을 보고 다 봤다고 알려주면 내가 답을 평가해서 다시 연락할께."
리크루터의 말대로 조금 뜬금 없었지만 일단 보기로 했습니다.
주말에 날을 잡고 링크를 클릭해보니 HackerRank라는 사이트에서 2시간동안 보는 온라인 코딩 테스트였습니다. Amazon Web Service(AWS) 팀에서 보내온 것 같습니다.
HackerRank에서는 온라인 IDE(통합개발환경) 비슷한 환경에서 텍스트 에디터를 띄워놓고 'Run Test'라는 버튼을 누르면 면접자가 쓴 코드에 대해 자체 유닛 테스트를 돌립니다. 어떤 테스트를 돌리는지는 알 수 없고, 몇 개가 통과되고 몇 개가 실패했는지 이런 것만 알려줍니다.
제가 들은 바에 의하면 HackerRank같은 온라인 코딩 테스트 플랫폼에서는 지원자가 구글링을 통해서 답을 찾아보는지, 혹은 어디선가 코드를 복붙해오는지 알 수 있다고 들었습니다. 정확히 어떤 원리인지는 잘 모르겠습니다. 또 때때로 카메라로 사진을 찍어서 같은 사람이 코딩하고 있는지도 확인합니다.
그 때 알고리즘, 자료구조 공부 안한지 꽤 되어서 준비를 좀 해보고 풀까. 하다가 시간도 없고 그냥 풀었습니다.
그런데 예상보다 문제가 어려웠습니다. 첫 번째 문제는 matrix transformation, 즉 행렬을 변환하는 문제였습니다.
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
이렇게 생긴 행렬을 시계방향으로 한칸씩, 모든 겹마다 다 회전시키는 문제였습니다. 위에 있는 행렬을 회전시키면 다음과 같습니다.
5 1 2 3
9 10 6 4
13 11 7 8
14 15 16 12
언어는 마음대로 고를 수 있었구요. 저는 C++을 사용해서 풀었습니다. 처음에는 그렇게 안 어렵게 보였지만 얕잡아 본 게 문제였습니다.
보통 이런 행렬 변환 문제가 나오면 가장 좋은 방법은 선형대수에서 나오는 간단한 공식들을 적용시키는 것이지만 제가 알고있는 모든 행렬 변환 공식 중 저런 식으로 변환시키는 공식은 없었습니다. 그래서 그냥 일일이 겹겹마다 for 루프를 돌리면서 O(N^2)의 알고리즘을 썼습니다.
언어 제약이 없을 경우 파이썬이나 루비같은 scripting(스크립팅) 언어를 쓰는게 편할 것 같습니다. 특히 C++보다는 파이썬에서 지원하는 문자열 함수들이 훨씬 편하다고 생각합니다. 저도 다시 테스트를 본다면 둘 중 하나로 볼 것 같습니다.
첫번째 문제에 시간을 너무 빼앗긴 나머지 두번째 문제를 풀 시간이 거의 없었습니다. 두번째 문제는 다음과 같습니다.
N개의 박스가 주어지고, 그 박스들은 높이, 너비, 길이가 다 다릅니다. 어떤 박스 A를 다른 박스 B에 집어넣으려면 B의 높이, 길이, 너비가 각각 A의 높이, 길이, 너비보다 길어야 합니다. 그리고 박스는 돌려서 넣을 수 없습니다. 최대한 많은 박스를 한꺼번에 가져가고 싶은데 그 갯수는 몇 개일까요?
모든 박스끼리 서로 비교하는 식으로 모든 경우의 수를 구하는 가장 단순한 알고리즘으로 풀면 경우의 수가 엄청나게 늘어납니다. Polynomial Runtime(다항식 실시기간)안에 풀수 없죠.
그래서 저는 dynamic programming(동적 계획법)을 써서 O(N^2)로 풀었습니다.
푼 다음에 시계를 보니 2분 정도밖에 남지 않아서 돌려보니 한방에 테스트를 패스했습니다.
리크루터한테 다 끝냈다고 이메일을 보내고 한 3주정도 지났는데도 아무 말이 없길래 떨어졌나 했습니다.
몇 주 지났는데 다시 이메일이 왔습니다. 이메일은 실수로 인턴 지원자들에게 보낼 코딩 테스트가 아니라 풀타임(정직원) 지원자들에게 보낼 코딩 테스트를 보냈으니 다시 보내주겠다는 내용이었습니다.
사실 좀 어이가 없는 경우였지만 종종 이렇게 리크루터들도 실수할 수 있다는 점 알아두셨으면 합니다.
개인적으로 이미 3개의 다른 회사들과 면접을 보고 있었기 때문에 그냥 그런가보다 하고 넘어갔습니다. 솔직히 풀타임 테스트를 보낸거 가지고만 평가를 해도 괜찮을 것 같았는데 다시 테스트를 보라니까 학교 개강도 해서 엄청나게 바빠졌기 때문에 또 저걸 보기가 꺼려졌습니다.
실수는 면접관이 한건대 제가 피해를 보는 건 아니지 싶었습니다. 아마존에 너무 실망한 순간이었습니다.
기분이 나빴지만 이를 악물고 리크루터한테 공손하게 이메일을 보냈습니다.
"사람은 누구나 실수를 할 수 있죠. 재밌는 코딩 문제였습니다! 다시 코딩 테스트를 볼 기회를 주신 것은 감사하지만 다른 회사들과 면접 일정들이 너무 빡빡해서 힘들 것 같습니다. 내년에 풀타임 지원할 때 다시 연락드리겠습니다."
기분 나쁘다고 리크루터 이메일을 무시하거나 안 좋은 소리를 하면 큰일납니다. 아무리 미국 문화가 한국보다 면접관/면접자의 상하관계 이런걸 따지는 편이 아니지만 기본적인 예의는 갖춰주는게 좋습니다. 들은 바에 따르면 회사들이 예의없는 면접자들에 대한 블랙리스트를 가지고 있다고 합니다.
아마존 면접은 이걸로 끝이 났습니다. 실제로 사람이랑 얘기한건 이메일이 끝이고 코딩밖에 안했으니 면접이라고 할 것도 없지만요.