48시간 안에 문제 풀면 면접보는 ‘구글 입사 초청장’

요즘 주말이면 조금씩 시간을 내서 개인 프로젝트로 SPA(single page applicaton)를 하나 만들고 있는데, 자스(javascript)로 짜려니 역시 힘들고 오래간만에 앙1(Angular1) 스크립팅을 조금 했습니다.

그런데 SPA를 조금 제대로 만들고 싶어서 (설계에 관련된 실무적인 부분과 기술적인 부분) 구글링을 부쩍 많이 하고 있는데 어느 사이트 화면에 오른쪽 부분이 좀 이상해 보이는 겁니다.

그래서 내 모니터가 잘못되었나 (픽셀이 깨진 줄 알고요. 아주 조그만 점 같은 게 하나 보였거든요) 본능적으로 마우스를 그 부분 위에 가져다 대고 눌렀더니, 헐~ 이런 메시지가 뜨는 겁니다.

“네가 우리 (구글) 언어를 하는데 게임을 시작해볼까?”

점심을 먹을 시간이라 나중에 보려고 console 주소를 일단 복사 해놓고 화면을 꺼버리려고 했더니 이런 문구가 보였습니다.

“이 창을 끄면 구글 초청장도 같이 날아가는 거야. 48시간 동안 문제를 풀어”

앗? 이게 바로 그 전설의 구글 초청장?

문제만 다 풀면 무조건 본 면접부터 보고 입사할 수 있다는 초청장.

당장 구글링부터 해봤습니다. 고의로 처음에 무엇을 해야 하는지 안 가르쳐 주고, 엉뚱한 command만 실행해 보려다 정작 시험문제는 보지도 못하는 사람들이 있다는 얘기를 예전에 어렴풋이 들은 기억이 떠올랐거든요.

개발자의 덕목은 뭐다? 선 검색. 무조건 아무 command나 막 시도해보는 개발자는 구글이 싫어하죠.

구글링의 도움으로 문제를 띄우는 데까지는 성공.

기대감도 한층 업.

‘이런 건 모르는 거지’, ‘거의 로또 당첨되는 수준으로 내가 아는 자스(javascript) 문제만 나올 수 있는 거잖아’, ‘앗싸. 잘하면 여름에 애들 데리고 구글 본사에 놀러 갈 수도 있겠다’는 개뿔. 황당하게 파이썬 하고 자바 문제가 뜸.

뜨악! 아니 왜 자스(javascript) 검색하던 사람한테 파이썬 하고 자바 문제를 내냐고? 너희 제정신이야?
이것들이 장난하나!

첫 문제만 파이썬으로 시도해 보고 창 닫아버림.

혹시라도 이런 입사 초청장을 받게 되시는 분들, 프로그래밍 실력은 좋으신데, command 시도하다 문제도 못 풀게 되시는 분이 계실까 봐, 제 시험 console 창을 복사해서 공유합니다.

Mounting /home/guest…
Welcome to foobar version 53-17-g6bfce4dd-beta (2017-03-21-22:12+0000)

Google has a code challenge ready for you.
Been here before? Log in

This invitation will expire if you close this page.
Success! You’ve managed to infiltrate Commander Lambda’s evil organization, and finally earned yourself an entry-level position as a Minion on her space station. From here, you just might be able to subvert her plans to use the LAMBCHOP doomsday device to destroy Bunny Planet. Problem is, Minions are the lowest of the low in the Lambda hierarchy. Better buck up and get working, or you’ll never make it to the top…
foobar:~/ guest$ ls
journal.txt
start_here.txt
foobar:~/ guest$ request
Requesting challenge…
Next time Bunny HQ needs someone to infiltrate a space station to rescue prisoners, you’re going to tell them to make sure ‘stay up for 48 hours straight scrubbing toilets’ is part of the job description. It’s only fair to warn people, after all.New challenge “solar_doomsday” added to your home folder.
Time to solve: 48 hours.
foobar:~/ guest$ cd solar_doomsday
foobar:~/solar_doomsday guest$ ls
constraints.txt
readme.txt
solution.java
solution.py
foobar:~/solar_doomsday guest$ cat readme.txt
Solar Doomsday
==============
Who would’ve guessed? Doomsday devices take a LOT of power. Commander Lambda wants to supplement the LAMBCHOP’s quantum antimatter reactor core with solar arrays, and she’s tasked you with setting up the solar panels.

Due to the nature of the space station’s outer paneling, all of its solar panels must be squares. Fortunately, you have one very large and flat area of solar material, a pair of industrial-strength scissors, and enough MegaCorp Solar Tape(TM) to piece together any excess panel material into more squares. For example, if you had a total area of 12 square yards of solar material, you would be able to make one 3×3 square panel (with a total area of 9). That would leave 3 square yards, so you can turn those into three 1×1 square solar panels.

Write a function answer(area) that takes as its input a single unit of measure representing the total area of solar panels you have (between 1 and 1000000 inclusive) and returns a list of the areas of the largest squares you could make out of those panels, starting with the largest squares first. So, following the example above, answer(12) would return [9, 1, 1, 1].

Languages
=========
To provide a Python solution, edit solution.py
To provide a Java solution, edit solution.java

Test cases
==========
Inputs:
(int) area = 12
Output:
(int list) [9, 1, 1, 1]

Inputs:
(int) area = 15324
Output:
(int list) [15129, 169, 25, 1]

Use verify [file] to test your solution and see how it does. When you are finished editing your code, use submit [file] to submit your answer. If your solution passes the test cases, it will be removed from your home folder.
foobar:~/solar_doomsday guest$ cat constraints.txt
Java
====
Your code will be compiled using standard Java 7. It must implement the answer() method in the solution stub.

Execution time is limited. Some classes are restricted (e.g. java.lang.ClassLoader). You will see a notice if you use a restricted class when you verify your solution.

Third-party libraries, input/output operations, spawning threads or processes and changes to the execution environment are not allowed.

Python
======
Your code will run inside a Python 2.7.6 sandbox.

Standard libraries are supported except for bz2, crypt, fcntl, mmap, pwd, pyexpat, select, signal, termios, thread, time, unicodedata, zipimport, zlib.
foobar:~/solar_doomsday guest$ edit solution.py
foobar:~/solar_doomsday guest$ status
You’ve not yet solved a challenge.
foobar:~/solar_doomsday guest$ submit
submit: No such file or directory
foobar:~/solar_doomsday guest$ submit solution.py
Are you sure you want to submit your solution?
[Y]es or [N]o: [Y]
Submitting solution…

매튜 박

미국 변호사·프로그래머
hackya.com@gmail.com