-
Google's Foobar Coding Challenge|구글 푸바 챌린지 후기'Log 2020. 3. 15. 19:52
#구글
#구글 코딩테스트
#구글 푸바챌린지
#Foobar
#Foobar Challenge
#구글 채용
#구글 이력서
#코딩테스트
#알고리즘
구글이 숨겨놓은 또 하나의 Easter egg: [Foobar Coding Challenge]
구글은 여기저기에 재미있는 이스터에그를 많이 심어놓은 것으로 유명하죠.
이스터 에그(Easter egg)는 영화, 책, CD, DVD, 소프트웨어, 비디오 게임 등에 숨겨진 메시지나 기능을 뜻한다. 이스터 에그라는 이름은 서양권에서 부활절에 달걀을 미리 집안이나 정원에 숨겨두고 아이들에게 부활절 토끼가 숨겨놓은 달걀을 찾도록 하는 부활절 달걀 찾기 풍습에서 유래했다.
- 출처: 이스터에그, 위키백과
저도 최근 재미있는 경험을 해서 그 후기를 기록해보려고 합니다.
바로 푸바 챌린지라는 것인데요!
신기하고도 재미있는 경험이었는데, 제가 검색해본 바로는 영어 후기는 많은데 한국어로 쓰인 후기는 거의 없는 것 같아서 기록으로 남겨보려고 합니다. 😆
저는 크롬에서 검색을 하다가 다음과 같이 갑자기 크롬창이 깨지면서 푸바를 만났습니다.
You're speaking our language. Up for a challange? (너 우리 언어를 사용하는구나? 도전 한 번 해볼래?)
라는 질문을 던지며 I want to play No, thanks Don't show me this again 의 세 가지 옵션을 선택하게 하죠.
흠, 일단 뭔가 크롬이 제게 제안을 하는 것은 흔한 일이 아니니 한 번 play 해보기로 하죠.
Play를 선택하면 다음과 같은 개발자스러운 창이 뜨게 됩니다.
이 때부터 저는 음 무언가가 벌어지고 있다는 것을 직감했고, 크롬의 다른 창을 켜서 Google Foobar Challenge를 검색해보았습니다.
찾아보니 재미있는 내용이 나오더군요!
검색했을 때 나오는 첫 글이 푸바 챌린지에 대해 자세하게 설명하고 있는데, 혹시 궁금하시다면 한 번 읽어보시는 것을 추천합니다!
글이 설명하는 내용을 요약해보자면 다음과 같습니다:
Q. 나 처음 들어보는데, 푸바 챌린지가 뭐야?
A. 구글 푸바 챌린지는 구글의 Secret Hiring Challenge다! 구글이 좋은 개발자를 지역에 관계없이 구하기 위해 만들어놓은 장치다.
Q. 헉, 나도 푸바 챌린지를 하고싶다!?
A. 아쉽지만 푸바를 밖에서 접근해오는 것은 불가능하다. Invitation을 받았을 때만 접속할 수 있다.
Q. Invitation은 어떻게 받는데?
A. 구글은 검색 키워드 등의 기록을 기반으로 invitation을 보낸다. (개발자스러운 기록들이 있으면 유리하겠지?!)
(덧- 저는 정확한 키워드는 기억이 안나지만, Pyenv나 Pandas 관련 검색을 하다가 떴던 것으로 기억합니다.)
Q. 그럼 Invitation을 받은 후에는 무엇을 해야해?
A. 초대를 받고 푸바에 접속하면 UNIX 기반의 인터페이스를 만난다. 여기에서 알고리즘 코딩 문제를 풀면 된다! 언어는 JAVA, Python 두 가지만 가능하다.
Q. Level 5까지 모두 완료하면 무슨 일이 일어나지?
A. 5 level까지 모두 완수하면, 개인 정보와 연락처를 입력하는 창이 뜨게 된다. 이걸 입력해서 구글에 보내면 하루 이틀 내에 채용 인터뷰 연락이 올 수 있다!
Q. 좋아, 그럼 채용이 된다면 어떤 직무로 될까?
A. 푸바 챌린지를 완수하면 인터뷰 기회가 주어지게 된다. 하지만 그 뒤의 일은 푸바 챌린지를 어떻게 풀었는지와 인터뷰에 따라 달라지겠지!
Q. 진짜 푸바 챌린지로 채용이 된 사람이 있을까???
A. "Yes" !
호오... 정말 흥미로운 내용이 아닐 수 없습니다. 구글이 심어놓은 비밀스러운 채용 챌린지라니!
사실 처음에는 저 글을 읽고도 설마, 하는 마음으로 믿기지가 않아서 조금 더 서칭을 해보았는데요! 🤣
조금 더 찾아보며 추가적으로 알게 된 사실들은 다음과 같습니다.
- Level 5까지 다 풀어야 개인정보를 입력하는 것이 아니라 Level 3까지만 풀면 이메일 등을 입력하라는 메세지가 나온다.
- Level 1은 한 문제, Level 2는 두 문제, 3은 세 문제, 4는 두 문제, 5는 한 문제로 총 아홉 문제가 나온다.
- 푸바 챌린지의 Invitation은 크롬의 검색 창에서만 뜨는 것이 아니라, 이메일로 오는 경우도 있다!
또한 실제 푸바 챌린지를 경험한 사람들의 댓글 등을 읽어 본 결과로는 다음과 같이 다양한 경우가 있는 것 같았습니다.
(제가 여기저기에서 찾아본 내용이어서 정확하지 않을 수 있습니다. 시크릿 챌린지다보니 정보가 다 오픈되어 있지는 않은 느낌이 들더라구요!)
- Case 1: Level 3까지 다 풀고 정보를 입력하니 하루만에 바로 구글 리크루터한데 연락이 오더라!
- Case 2: Level 3까지 풀고 개인정보를 입력했고, 심지어 Level 4와 5까지 다 풀었는데도 두 달이 지난 지금까지도 연락이 안왔다.
- Case 3: 1년이 지난 시점에 메일이 왔다. 푸바 챌린지를 했다는 사실조차도 잊고 있었어..
- Case 4: 푸바 챌린지를 통해 인터뷰 기회가 왔고, 면접을 봤다. 비록 면접에서 떨어졌지만..
이처럼 다양한 케이스가 있었지만, Level 3까지 풀게 되면 개인정보를 입력하고, 운이 좋은 경우 리크루터한테 연락을 받은 사람은 여럿 있는 것으로 보였습니다. 내가 푸바 챌린지로 구글에 입사했다! 는 확실한 케이스는 못 찾았지만요 😂
이 정도를 서칭해보니 흥미가 마구마구 샘솟는데, 도전해보지 않을 수 없겠죠!!
푸바로 돌아와서 바로 도전해보려고 하는데, UNIX 터미널 창은 구글답게도 어떻게 시작해야하는지 아무런 설명이 없었습니다. 🤣
간단히 읽어보니 처음에
help
나request
를 쳐보라고 하는 것 같아서..! 일단request
를 해보았습니다.(매뉴얼 절대 안읽어 무조건 시작부터해~~~👻ㅋㅋㅋㅋ)
request
를 입력하면 다음과 같이 바로 문제를 시작할 수 있게 됩니다.새로운 챌린지가 시작되면서, 첫 번째 문제는 48시간이 주어졌습니다.. 매우 넉넉한 시간..! 구글 자신 있다는건가 hoxy~
챌린지가 시작되면 제한 시간 내에 해당 문제를 풀어야 하고, 제출하면 예제로 오픈되어 있는 두 개의 test case와 10개 남짓의 hidden test case까지 모두 통과해야 챌린지를 통과하게 되는 간단한 코딩 테스트 형식이었습니다.
help
를 입력하면 다음과 같이 사용할 수 있는 명령어 목록이 나오게 됩니다. 아래 명령어 외에는 사용할 수가 없게 막혀있더라구요.챌린지의 문제가 txt 파일 형식으로 주어지기 때문에 문제를 확인할 때는
cat
명령어를 사용해서 확인합니다.또한 답안 코드는
solution.py
또는Solution.java
파일에 코드를 입력해 제출해야 하므로,edit
명령어를 통해 python 또는 java 두 가지 파일 중 하나를 선택해서 편집 후 제출하는 방식이었습니다. 답안 코드를 test case에 확인해보고 싶을 때는verify
를, 최종 제출하고 싶을 때에는submit
을 사용합니다. 챌린지를 진행하면서 주로 사용한 명령어는 이 정도 뿐이었던 것 같습니다.
Google Foobar Challenge에서 내가 만났던 문제들
저는 Level 3까지 총 6문제를 이틀에 걸쳐 풀었고, 6문제를 푸는 데에 총 약 10시간 정도가 걸렸습니다.
Level 1과 2는 비교적 간단해서 꽤나 빠르게 푼 것 같은데, Level 3는 고민되는 부분도, 막혔던 지점도 많아서 많은 시간이 걸렸던 것 같아요.
검색도 자유롭게 가능한 오픈 테스트였기 때문에 자료가 많지는 않지만 기존에 사람들이 풀어놓았던 풀이를 볼 수도 있었는데, 아이디어 측면에서 도움을 받은 부분도 있었고, 코드를 봐도 이해가 안 가던 문제들도 있었습니다. 하지만 뭔가 오기같은 게 생기기도 하고.. 구글이 이미 내 검색기록을 훔쳐봤으니 내가 다른 사람이 올려둔 솔루션들을 검색하면 이것도 걸리지 않을까.. 하는 생각도 들어서 😂 누가 감시하는 것은 아니지만 조심스러운 마음에 살짝씩 검색해보거나 봤더라도 솔루션 자체는 제가 고민해본 과정으로, 저만의 코드로 작성해보려고 노력했던 것 같습니다.
제가 만났던 문제들은 다음과 같습니다.
저는 간단한 문제 소개와 풀어내는 데에 필요했던 알고리즘적 아이디어 위주로만 간단히 작성하였는데, 혹시 문제를 더 자세하게 알고 싶다면 [Foobar challenge + 문제 제목] 키워드로 검색해서 문제 본문을 찾아볼 수 있습니다.
Level 1: I Love Lance & Janice
소요 시간 : 10m
(제한시간: 48h)- 문자열에 대해 간단한 변환 로직을 구현하는 문제
- Requirement : 암호화 된 문자열을 입력받아 복호화 된 문자열을 출력하는 함수 구현
- 문제 설명에 한 알파벳을 다른 알파벳으로 바꿔서 암호화하는 규칙에 대한 힌트를 제공
- 예제 케이스로는 원본 문장 - 암호화 된 문장 쌍을 두 가지를 보여줌
Level 2-1: Elevator Maintenance
소요 시간 : 20m
(제한시간: 48h)- 문자열에 대한 정렬 문제
- Requirement : "2.0.0", "1.4" 등의 버전 형식으로 나타난 여러 개의 문자열을 버전 순으로 정렬하는 함수 구현
- 다른 코딩 연습 사이트에서도 한 번쯤 접해봤을 법한 친숙한 문제
.
을 다루는 것만 조금 신경쓰면 어렵지 않게 해결 가능
Level 2-2: Don't Get Volunteered!
소요 시간 : 50m
(제한시간: 48h)- 최단경로를 찾는 전형적인 완전탐색 문제
- Requirement : 체스판에서 Knight (기사) 말이 출발칸으로부터 도착칸까지 움직여야하는 최소 이동 횟수를 찾는 함수 구현
- 출발칸으로부터 기사 말이 움직일 수 있는 모든 칸을 하나씩 다 탐색하며 도착칸을 찾을 때까지 탐색하는 BFS 알고리즘 활용
- 다만, 체스판 밖을 벗어나는 것을 신경써야 하고, BFS로 탐색하는 노드의 개수가 아니라 root로부터의 Depth를 반환해야 함을 잊지말기
Level 3-1: Bomb, Baby!
소요 시간 : 2h30m
(제한시간: 96h)- 이 때 부터 급격히 어려워집니다..
- 숫자에 대한 감각도 필요하고, 큰 숫자가 입력되는 것을 대비한 효율성도 고민해야 하는 문제
- Requirement : (A, B)의 두 숫자에서 뺄셈만 이용해 (1, 1)을 만들어내는 것이 가능한지 확인하고, 가능하다면 뺄셈 횟수를 찾는 함수 구현
- 일단 (1, 1)을 만들어내는 것이 가능한지 불가능한지를 확인해야 하는데, 언제 가능하고 언제 불가능할까..? 를 찾아내야 함
- 손으로 직접 써가면서 규칙을 찾아보면 생각보다 규칙 자체는 간단할 수 있음
- 하지만 큰 수가 들어왔을 때 뺄셈만으로는 연산속도가 너무 느리니 더 빠르게 풀려면 어떻게 개선하면 좋을지도 또 고민해야 함
Level 3-2: The Grandest Staircase Of Them All
소요 시간 : 4h30m
(제한시간: 96h)- 제일 오래걸리고 골치도 아팠던 문제....
- 문제 자체는 수의 분할로 간단하고, 뭔가 재귀로 풀 수 있을 것 같지만 잘 안 풀리는 문제
- Requirement : 주어진 수를 "서로 다른 숫자"로 분할하는 경우의 수를 찾는 함수 구현
- 그냥 수의 분할은 여러 알고리즘에서 접해봤을 법 한데, 서로 다른 숫자로 분할하는 것은 약간 곤란스러운 부분..
- 이 문제 또한 손으로 써보면서 규칙을 찾아보면 큰 수에서 작은 수로 내려가는 재귀가 떠오르지만 명확하게 와닿지 않아 A4 20장은 쓴듯..
- 결국에는 재귀를 사용하지 않고, 수가 입력되면 3부터 전부 찾아서 모든 경우의 수를 더하는 방식으로 해결
Level 3-3: Queue To Do
소요 시간 : 1h30m
(제한시간: 96h)- Level 3-2까지 하루만에 내리 8시간을 넘게 풀고 진이 빠져서 다음날 도전한 문제
- 3-2가 너무 어려웠기에 두려움을 안고 시작했지만 생각보다 간단하게 풀림 굿
- XOR 연산을 자유자재로 다룰 수 있어야 풀 수 있는 문제
- Requirement : 문제가 요구하는 규칙대로 수의 리스트를 만들고, 그 리스트 내 모든 숫자에 대해 XOR 연산을 해서 나오는 결과를 반환하는 함수 구현
- 문제가 요구하는 리스트를 만드는 것은 어렵지 않고, 그 안의 모든 숫자에 대해 XOR 연산하는 것도 reduce를 사용하면 되겠다.. 했는데
- 리스트가 매우 큰 경우 reduce 함수로는 시간초과가 일어나버림.. XOR 연산을 더 빠르게 할 수 있는 방법에 대해 고민해봐야 하는 문제
이렇게 총 약 10시간의 시간을 거쳐 드디어 Level 3-3 문제까지 모두 해결하고 나니..!!
저에게도 다음과 같이 너 정보 구글 리크루터한테 보내볼래? 하는 메세지가 나타났습니다.
여전히 반신반의를 하며.. Proceed를 해서 제 이메일과 국적, 현재 학업 상태 등을 모두 입력하고 전송했죠.
결론부터 말하자면..!! 저는 저 정보를 전송한 바로 다음날에 구글의 리크루터로부터 메일을 받았습니다.
안녕! 나 구글의 Asia Pacific 지역 담당 리크루터야. 너 푸바 챌린지 재밌게 잘 한 것 같더라?
거기서 너가 너 정보를 리크루터한테 보내고 싶다고 해서 전송된 정보 받아봤어!
확인해보니 너에 대해 흥미가 생겨서 간단한 소개랑 이력서를 받아보고 싶은데,
너한테 딱 맞는 직무가 지금 열려있을 거라고 장담은 못하지만 혹시 너도 관심 있다면 보내줘 :)OMG-
이력서를 보내달라는 내용의 메일이었는데, 저는 작성해 두었던 영어 이력서가 없어서 😱
부랴부랴 이삼일 정도 기간동안 작성을 해서, 오늘 조금 전에 이력서와 함께 답신 메일을 보낸 상태입니다.
아직 답장은 안 왔고..! 😆
이 뒤에 어떤 일이 일어날지 아직 모르지만 여기까지 온 것 만으로도 즐거운 마음으로 기다려보려고 합니다.
혹시 이 이후에 새로운 내용이 업데이트 된다면 본 포스팅에 추가를 하도록 하겠습니다 :)
여기까지가 저의 푸바 챌린지 후기입니다.
혹시 크롬에서 개발 관련 검색을 하다가 창이 이상하게 깨진다! 하면 꼭 놓치지 말고 푸바를 즐겨보시길 바랍니다 :)
어디서 어떤 일이 일어날지는 아무도 모르는 것이니까요! 🧚🏼♀️
이후 구글과 신입 엔지니어 직군으로 코딩 인터뷰를 진행하였습니다.
이에 관한 이야기는 여기에서 읽으실 수 있습니다.
''Log' 카테고리의 다른 글
Google Coding Interview|구글 신입 엔지니어 인터뷰 준비 후기 (12) 2020.05.24 글또|4기 시작과 2019년 회고, 그리고... (0) 2020.02.27 글또|3기 시작과 2019 상반기 회고, 그리고 하반기 다짐 (5) 2019.07.06 댓글