読者です 読者をやめる 読者になる 読者になる

今日も窓辺でプログラム

外資系企業勤めのエンジニアが勉強した内容をまとめておくブログ

LeetCode: コーディング面接に向けた練習に使えるサイトの紹介

この記事について

LeetCode Online Judge というアルゴリズムやデータ構造に関する問題を解いて、オンラインジャッジまでできるサイトがあるので、どのようなサイトかを簡単に紹介します。

LeetCodeとは?

LeetCodeとは、下記サイト LeetCode Online Judge の運営団体、および下記サイトそのもののことです。
leetcode.com

f:id:kanohk:20160905142949p:plain
上の画像のように、Google, Facebook, Microsoftをはじめとした、世界トップレベルのIT企業のエンジニアの面接で実際に使用された過去問がたくさん掲載されています。
Online Judgeというぐらいなので、実際に自分のコードを提出し、自分の書いたコードが正しいのか、他の提出者に比べてどの程度の速度のコードを書いているのか、などがわかるような仕組みになっています。
一部機能は有料ですが、無料でも十分にこのサイトを活用することができます。

日本人にとって苦労する点は、サイトが英語でしか提供されていない点です。問題文、解答、フォーラムでの議論など、すべてが英語で書かれています。
外資系のエンジニアを目指すのであれば英語は多かれ少なかれ勉強しないといけないと思うので、英語の勉強だと思って読んでみるのもいいんじゃないかと思います。

基本的な使い方

問題や解答の閲覧だけであれば、会員登録などは不要です。このリンクから飛ぶと問題一覧が表示されるので、鍵マークのないものであれば好きなものを見ることができます。
Problems | LeetCode OJ

例えば、私が過去の記事にした、"Implement Queue using Stacks"という問題でしたら、下記リンクから実際の問題文を見られます。
Implement Queue using Stacks | LeetCode OJ
問題ページには、他にどのくらいのユーザがこの問題に挑戦してるかの参考になる値も表示されていたりします。
f:id:kanohk:20160905142551p:plain

また、この問題の場合は解答も用意されていて、こちらから確認できます。
Implement Queue using Stacks

画面下に言語を選んでソースコードを貼り付ける箇所がありますが、ここに実際のコードを書いて、Submitすると、テストケースが実行され、自分の書いたコードが正しいかどうか確認することができます。
間違っていると間違っていたテストケースが表示されるので、それをもとにデバッグを進めていくことになります。また、正しいプログラムを提出したあとには、次のように自分のコードが提出者全体の中のどの位置に属しているかを視覚的に確認することもできます。言語ごとに色分けして表示することもできるので、それを見ているだけでも結構面白いです。
f:id:kanohk:20160905141402p:plain

解答が用意されていない問題も結構あるのですが、そのような問題の解答が知りたい場合には、問題文下の Discussion ボタンからフォーラムに飛びましょう。
Implement Queue using Stacks | LeetCode Discuss
このように、他のユーザが自分の書いたコードとともにこういう解法もあるよ!というようなことをディスカッションしています。
結構面白いことが話題になっていることもあるので、人気のあるスレッドだけでも目を通しておくといいんじゃないでしょうか。

有料プランもあるらしい。。

下のスクショのように鍵マークのついている問題は、有料プランに加入しないとみることができません。
f:id:kanohk:20160905141946p:plain

また、問題文は見られるけど解答は有料プラン必須、というようなパターンもあります。現時点で1か月25ドル、1年プランだと159ドルと、決して安い値段ではなく、私自身もまだプランの加入には踏み切れずにいます。。
有料プランに加入すると、その問題がどの会社で過去に出された問題か、なども見ることができるようになるので、やる気のある方は有料プランに加入してできるだけ早くすべての問題を解いてしまうのもありかと思います。
実際に、私の周りでも、1か月でこの問題を全部解いてしまい、そのまま某検索企業に就職していった人もいたりします。

また、他にもMock interviewやコンテストなど、このほかの機能もたくさんあるようですが、まだ私自身も使用したことがないので割愛します。。

以上がLeetCodeの簡単な紹介になります。
日本語での情報が少ないのですが、英語がある程度読めるのであれば挑戦してみて損はないのではないでしょうか。