brunch

You can make anything
by writing

C.S.Lewis

by 이얼 Aug 06. 2019

Leetcode의 Moore의 법칙

Leetcode의 문제 수는 6백일마다 2배가 된다

는 한국에서 회사 면접을 볼 때 20분도 안 걸려서 끝났던 기억이 있다. (소프트웨어 엔지니어로서의 테크니컬한 질문은 없었고 영어로 자기 소개를 해보라고 했었다.) 그런데 미국에서의 소프트웨어 엔지니어 인터뷰는 보통 5시간 정도가 걸리고, 그 중 대부분의 시간은 화이트보드을 이용해서 코딩 문제를 푸는 것으로 보내게 된다. 그러다보니 인터뷰 후기를 바탕으로 인터뷰에 나왔던 코딩 문제를 모아놓은 문제은행같은 웹싸이트들이 있는데, 이 중 가장 유명한 것이 Leetcode이다. 웹사이트에서 코드를 직접 실행해 볼 수 있고 test case도 이미 입력되어 있어서 편리하다.


이직을 한다고 하면 모두가 공통적으로 물어보는 질문이 있다.

1) "인터뷰 공부는 얼마나 오래 공부했니?'

2) “LeetCode 문제는 몇 개나 풀었니?"

3) “시스템 디자인은 뭘 공부해야 돼?”


첫 번째와 두 번째는 연관된 질문이다. Leetcode의 코딩 문제들은 무시무시한 속도로 늘어나고 있기 때문에, 그 많은 문제를 정말로 다 봐야 하는 것인지, 다 보려면 도대체 예상 소요 시간이 얼마인지 다들 궁금해 하는 것이다. 세 번째 질문은 코딩과는 전혀 다른 영역인 시스템 디자인에 관한 질문인데, 아이러니하게도 코딩 인터뷰에 관한 중요한 사실 하나를 시사하고 있다. 시스템 디자인에 관해서는 “무엇을” 공부해야 하는지 질문들을 하지만, 코딩에 관해서는 아무도 “무엇을"에 대한 질문을 하지 않는다는 것이다. 즉, 코딩에 관한 한, 무엇을 공부해야 하는지는 모두가 이미 암묵적으로 알고 있다. 그것은 바로 LeetCode의 문제들이다. 코딩 문제는 거의 다 이 안에서 나온다. 코딩 인터뷰는 범위가 엄청나게 넓지만 어쨌든 그 범위 안에서만 거의 다 나온다.


문제는 인터뷰 후기가 늘어남에 따라 Leetcode에도 계속 문제가 추가된다는 것이다. 문제수가 얼마나 빨리 늘어나는지는 아래의 그래프가 보여준다:


날짜별 Leetcode의 코딩(=Algorithms) 문제 갯수


    100 문제 돌파: 2014년 2월 24일  

    200 문제 돌파: 2015년 5월 23일  

    400 문제 돌파: 2016년 10월 8일  

    800 문제 돌파: 2018년 6월 16일  

    1000 문제 돌파: 2019년 6월 1일   


그러니까 처음 100문제에서 200문제가 되기까지는 453일이 걸렸고, 200문제에서 400문제가 되는 데는 504일이, 400문제에서 800문제가 되는 데에는 616일이 걸렸다. 무어(Moore)의 법칙이란, 반도체 집적회로의 성능이 24개월마다 2배로 증가한다는 것인데, Leetcode 문제 수는 무어의 법칙보다도 더 빨리 증가한다.


내가 처음 Leetcode라는 것이 있다는 것을 알았던 2015년에는 약 2백 개의 문제가 있었고, "Leetcode를 2번씩 풀어보면 Top 4 컴패니와 인터뷰를 할 만 하다"라고들 했었다. 그리고 그렇게 하려면 개인차가 있겠지만 짧으면 3개월, 길면 6개월 걸린다고 했다. 그러나 2019년 8월 현재, 코딩(=Algorithms) 문제만 1,072개가 있다. 그렇다면 2015년보다 문제 수가 딱 5배가 늘어났으니, 최소 15개월 최대 30개월이 걸린단 말인가!!! 그렇다면 최악의 경우 4년마다 한 번씩 이직을 한다면, 이직을 하자마자 처음 18개월은 새 회사에 적응하고, 나머지 30개월은 다음 번 이직을 위해 Leetcode 문제를 풀며 보내야 한단 말인가!!! 그러나 그 4년간 문제의 수가 4천문제로 늘어서, 우리는 아킬레우스가 거북이를 따라잡지 못하듯이 문제가 늘어나는 속도를 영원히 따라잡지 못할 것이다... 이게 말이 되는가?


소프트웨어 엔지니어 인터뷰가 너무 '고시'화되고 있는 것이 아닌가 하는 우려가 드는데, 이제는 Leetcode 문제를 다 풀려고 해서는 안되고 패러다임의 전환이 필요하다. "Leetcode 1천 문제 중 몇 문제 풀었니?"라는 질문을, 나는 요즘 구글에 들어온 사람들에게 다 물어보고 다니는데, 대체로 2백개 내외를 풀었다고 대답한다. 적게 풀고도 붙은 척 하는, 일종의 블러핑일지도 모르겠지만, 우리가 풀어야 하는 최소한의 문제 수는 '2백 개'라고 생각할 수 있다. 나의 경우는 Leetcode에 문제가 3백 개 있던 시절에 이상한 문제 몇 개 빼고는 2번씩 풀고 구글 인터뷰를 통과했는데 그 때는 구글에 가지 않았고, 7백 개 있을 때 6백 개를 풀고다시 구글 인터뷰를 통과해서 오퍼를 억셉했다.


그렇다면 도대체 우리는 몇 문제를 풀고 인터뷰에 임해야 하는 것일까? Leetcode에 관해서는 할 얘기가 너무 많아서 일단 여기서 끊고, 대신 인터뷰 tip이 나간다. 인터뷰 준비를 일상화하라. 인터뷰 공부는 이직을 염두해 두고 있을 때만 하는 것이 아니라, 일상적으로 하는 것이다. 이직을 결심하고 3달 안에 인터뷰 공부를 마칠 수 있는 시대는 갔다.


인터뷰 tip 요약:

나의 속도로는 얼마나 오래 인터뷰를 준비해야 할지를 항상 파악해야 한다. 문제의 양과 질을 파악하고 나의 속도를 파악하면 얼마나 공부해야 하는지를 알 수 있다.

'문제의 갯수'라는 양적인 면에서 파악하라. Leetcode 문제를 풀지는 않더라도, 지금 Leetcode에 몇 문제가 있는지, 내가 푼 문제는 몇 개이고 풀지 않은 문제는 몇 개인지, 나의 속도로는 최소 2백 문제를 풀려면 얼마나 걸리는지, 내가 가고 싶은 회사에서 출제한 문제는 몇 개이며 얼마나 빠른 속도로 늘어나고 있는지 등을 파악하고 있어라.

'문제의 난이도'라는 질적인 면에서 파악하라. 최근에 추가되는 문제들의 난이도는 얼마나 되는지, 새로운 토픽이 추가되고 있는지 아니면 옛날 문제의 변형인지, 3가지의 difficulty level (Easy/Middle/Hard) 중 어느 것이 많이 추가되고 있는지를 파악하라. 요즘 middle 레벨로 추가되는 문제는 몇 년 전에 hard로 추가되는 문제보다도 어렵다.

새로 추가되는 Leetcode 문제를 풀지는 않더라도, 문제의 description은 꼭 읽어본다. 처음보는 문제에서 요구하는 것이 무엇인지 파악하는 것은 꽤 시간이 걸린다. 문제를 이해하는 것이 50%, 실제 코딩이 50%다. 평소에 새로 추가되는 문제를 읽어만 봐도 인터뷰 준비의 절반은 하고 있는 것이다.


그리고 앞으로 쓸 (지도 모르는) 이야기들  

코딩 인터뷰 준비는 얼마나 오래 해야 할까? Leetcode의 1천 문제를 다 풀다 흰 머리 날 때까지?

Leetcode의 파레토의 법칙: 인터뷰어들에게 사랑받는 문제들 (최소 2백문제 풀기)

[Leetcode 공부방법] 공부할 때는 비슷한 문제를 묶어서, 모의 인터뷰를 할 때는 랜덤으로 뽑아서

[Leetcode 공부방법] 엑셀로 관리하라: 안 풀리는 문제는 로그를 남기

[Leetcode 공부방법] 어떤 솔수션이 좋은 솔루션인가? 

일부일처제와 잡 인터뷰의 공통점: 잡 서치가 결혼만큼 어려운 이유는?  

제철 과일같이 적기에 인터뷰 보기: 인터뷰는 언제가 제철일까?  

좁고 깊게 보다는 넓고 얕게: 일단 인터뷰어와의 접점을 찾아라

한국의 '면접관'과 미국의 '인터뷰어'의 차이점

회사에서 잘나가는 10년차 엔지니어, 왜 이직을 못할까?

회사를 떠날 때와 남을 때: 철새와 텃새 중 지능이 더 높은 쪽은?

'영어'가 문제가 아니라 '언어'가 문제다

시중에 나와 있는 인터뷰 책 리뷰

책을 봐야 할까, Leetcode 문제부터 풀어야 할까?

코딩 인터뷰 준비는 얼마나 오래 해야 할까? Leetcode의 1천 문제를 다 풀다 흰 머리 날 때까지?  

붉은 여왕의 법칙: 인터뷰어와 인터뷰어는 함께 진화한다. 피식자와 포식자처럼  

링고 스타 신드롬과 임포스터 신드롬: 턱걸이로 인터뷰 통과하기  

용 꼬리, 뱀 머리, 이무기의 허리 중 나에게 맞는 전략은?  

Generalist v.s. Specialist: 팀에서 뽑는 인터뷰와 회사 차원에서 뽑는 인터뷰에 따라 달라지는 전략  

인터뷰어가 개떡같이 말해도 찰떡같이 알아듣는 법  

떨어졌을 때와 붙었을 때의 준비 방법의 차이점

이거 떨어졌다는 신호인가요? 미래를 딱 일주일 전에 미리 알 수 없을까?

큰 수의 법칙: 인터뷰를 여러 번 보자

큰 회사, top company가 더 가기 쉬울 때가 있다

오늘도 나는 떨어졌지만 지난 번보다 나아졌다

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari