LeetCodeを使い倒す② ~初級編~

6 min read読了の目安(約5600字

とにかくなんでもいいからLeetCodeで問題を解くという体験をしてみたい、という方は、LeetCodeを使い倒す① ~入門編~をご覧ください。
今回は、LeetCodeで中長期的に勉強するために有用なコンテンツや機能を紹介します。

「LeetCodeを使い倒す」記事の概要

コンテストに関する情報ではなく、好きな問題を探して解く自習を想定しています。
前回の記事:LeetCodeを使い倒す① ~入門編~

今回の記事の概要は↓こちら。
LeetCodeを使い倒す② ~初級編~

  • 解説や他のユーザーの解答を読む
  • テーマを決めて勉強する
  • 外資系企業のコーディング面接対策用コンテンツ
  • 有料会員が使える便利な機能

書いてない (書くつもりがない) こと

  • 競技プログラミングコンテストで良い成績を取る方法
  • 外資系企業の面接に合格するためのテクニック

解説/他のユーザーの解答を見る

問題のページの「Solution」タブでは、公式の解説を確認することができます。基本的には文字ベースですが、短い動画で表現されているものもあります。サンプルコードはC++やJavaが多く、次いでPythonも多い印象です。それ以外の言語での公式の解説はほとんどみたことがないのですが、解説と同様のロジックを他の言語で実装しているユーザーの解答もあるものが多いので、他の解答を見たい場合は後述するDiscussionボードを活用してください。

余談ですが上図の解説は、非常に有名な問題であるTwo Sum(Easy)のものです。大体は複数のアプローチについて解説しており、計算量が大きいナイーブなものから順番に並んでいます。

公式の解説以外にも勉強の場としてぜひ活用してほしいのがDiscussボードです。ユーザーが解答や解説を投稿することができる掲示板のことで、その投稿を見るユーザーは投稿にコメントしたり、良いと思った場合には投票(Vote)することができます。公式の解説も、大体がユーザーが提供する解説のキュレーションのような形になっています。

多くの票を獲得している投稿では特に活発に議論が行われていて、そのやりとりを読むのも、着眼点の勉強になります。まずは票の多い投稿を読んで解答を理解し、慣れてきたらコメントも読んでみましょう。

注意点として、LeetCodeの解説/解答コードについてですが、人気のある解答であっても、アプリケーション開発時のお作法に則っているか、もしくは面接で/万人に受けるコードかと言われると、そうでもないこともあります。1行で書くことにこだわるあまりすぐに読めないようなものや、短いコードだからと命名に関して手を抜いていたりすることもあります。コードの書き方を真似することも勉強になりますが、実務においては競技プログラミングの書き方が絶対に正しいと思わない方が良いでしょう。

LeetCodeの解説を読むコツ(個人の見解です)

LeetCodeの問題を自力で解いたら、下記のような手順で解答を確認すると良いでしょう。

  1. まず問題文の上部にある「Solution」タブを読む (Solutionがないもの、もしくは有料会員限定になっていて読めない場合は飛ばす)
  2. 次に「Discuss」タブで「Most Votes」でソートしたときに上位に出てくるものをいくつか読む
  3. 自分で書けそうだったら実装してみる
  4. 使用言語で投稿をフィルタし、その中でVotesが多いものをいくつか読む

解説を読んでから書いても意味がないのでは?と思われる方もいるかもしれませんが、例え記憶に新しいソースコードであっても、自分の手で書くことで細部まで理解することができます。
わかったつもりでも、実際に書いてみると意外に書けなかったりもしますので、自分の頭の中をまるっと取り出すつもりで手を動かしてみることをおすすめします。

テーマを決めて勉強する

前回の記事では、自分で問題一覧からフィルターを用いて選ぶという方法を紹介しましたが、どのような問題を解きたいという明確な目標がない人は、LeetCode Exploreにアクセスしてみましょう

このページには、下記のようなコンテンツがあります。
LeetCode Exploreページのコンテンツ

  • Interview
    • コーディングインタビュー(面接)対策用のコンテンツです。現時点では有料会員しかアクセスできないようです。企業ごとに出題傾向を考慮して問題がまとめてられています。
  • Learn
    • 配列、連結リスト、二分探索木、再帰といった、データ構造とアルゴリズムのテーマごとに問題をまとめてあります。初学者の人や、不得意な分野を強化したい人が取り組むと良さそうです。
  • Challenge
    • 定期的に開催され、LeetCodeが選んだ問題を1日1問出題されます。一つのチャレンジがおよそ1ヶ月程度で、その期間中に出される問題は、最初は簡単なものから、終わりにかけて徐々に難しくなっていきます。毎日学習を続けたいけど、問題の管理が面倒という人はチャレンジしてみると良いでしょう。

外資系企業のコーディング面接対策用コンテンツ

モックインタビュー (模擬面接)

上記Interviewのコンテンツの使い方を簡単に説明します。画面上部のヘッダーの「Mock」をクリックしてください。

このページでは、時間を決めて数問ぶっ通しで解くという模擬面接のような体験ができます。全ての問題に解答し提出すると、コードの正確性や記述するスピードなどが考慮された評価が表示されます。
上図の中央部分には四角形のカードが何枚か並んでいると思いますが、その1段目には、「Rnadom question set from a real company」のカードが並んでいて、2段目にはGのアイコンと共に「Google」と書かれています。上図では確認できないのですが、Rnadom question以外は有料会員しかアクセスすることができません。対応している企業には、Google、Facebook、Amazon、Microsoft、Bloomberg、Adobe、Apple、Uberがあります。
また、1行にはカードが3枚あり、それぞれOnline Assessment, Phone Interview, Onsite Interviewに対する対策になります。左から順番に難しくなり、時間も長くなります。

この、Random question setというのは、どこの企業かはわからないものの、コーディング面接で出題されたことがある問題です。有料会員限定であるGoogleなどの会社の問題も含まれており、コーディング面接のレベル感を体験するには良いでしょう。ただし、会社によって問題に傾向がありますので、もし受ける会社が決まっている場合は有料会員になって狙っている企業の対策をした方が良いかも知れません。

掲示板

また、模擬面接ではないものの、最近のコーディング面接体験記などを読むことができる掲示板もあります。画面上部ヘッダーの真ん中にある、「Discuss」タブをクリックすると、下図の画面になります。好きなテーマの記事を探してみましょう。

有料会員が使える便利な機能

これまでにも度々、有料会員しか見れないコンテンツについて言及してきましたが、有料会員になると使える機能の中で、特に便利なものとその用途をまとめてみました。

有料会員限定の便利機能

  1. Frequency(その問題が面接で出題された頻度)が見れる
  2. 有料会員限定の問題にチャレンジできる / 限定で見ることができる解説にアクセスできる
  3. 問題が、実際にどの企業のコーディング面接で出題されたかを知ることができる。出題企業で問題をフィルタすることができる
  4. 面接対策のためにモックインタビューの機能を使用できる

ここからは個人的な意見になってしまいますが、LeetCodeに掲載されている問題は、全てが同じクオリティというわけではありません。アルゴリズムの代表的な問題もあれば、中には数学パズルのような問題や、データ構造に慣れるための問題など、傾向は様々です。
どの問題が良い、悪いということではなく、それぞれの問題において学ぶものが異なるため、「自分が今解くべき問題」を自分で選んで学習するためには、どうしても有料会員の機能があった方がやりやすいです。
例えば、GAFAのどこかの会社の面接を受けたいと思っている人は、出題企業ごとの問題フィルタリング機能を使いたいと思うでしょうし、初学者でLearnを解いた後、より発展的な問題を解きたいと思っている人は、パズルのような問題よりも面接で頻繁に出題される問題にチャレンジしたいと思うかも知れません。モックインタビューの機能も、コーディング面接をイメージして緊張感を持って取り組めますし、受験後には結果の評価もしてもらえるため、面接を受ける予定がある人にとっては非常に便利だと思います。
後述しますが、自分が学ぶ目的と学ぶ期間を考え、ある程度集中して中長期的に取り組む理由があるのであれば、有料会員になるメリットは大きいと思います。

有料会員のお値段

画面右上にある「Premium」ボタンを押すと、下記の通りプライシングをみることができます。

1ドル110円で計算すると、月々3,850千円、年間契約だと1.75万円弱とあまりお安くはないですが、5ヶ月間以上Subscribeする場合は年間契約の方がお得です。
また、毎年やっているかはわかりませんが、年末(ブラックフライデーの時期だった気がします)にセールをして安くなっていることもあります。

お読みいただきありがとうございました

いったんLeetCodeを使い倒すシリーズは完結になります。感想などあればぜひ教えていただけると励みになります
もし需要があれば、今後下記のような記事を書きたいと思っています。

  • LeetCodeを用いた効率的な勉強の仕方
  • 初学者が取り組むのに良さそうな問題のリスト
  • データ構造とアルゴリズムを基礎から勉強する方法

正直このシリーズを連載することで筆者に何かメリットがあるわけではないので、ご希望の場合はTwitterでファボもしくはリプなどでご教示いただけると嬉しいです。教材を売り付けたりするという話ではなく、勉強のやり方は現役GAFA社員など影響力の強い人が書かないと意味がないかも知れないので、ある程度反響があれば続編を検討したいと思っています。

長文お読みいただき、ありがとうございました!アルゴリズムを学ぶことはとても楽しいことなので、この記事で少しでもLeetCodeという遊び場を使う人が増えると良いなと思っています。