LeetCodeを使い倒す① ~入門編~

4 min read読了の目安(約4000字

LeetCodeに取り組んでみたいけどなかなか手が付かないという意見を度々聞くので、LeetCodeを抵抗なく使える人が増えるといいなという気持ちで書きました。

注意点として、LeetCodeは日本語に対応していません。使い方を覚えても、問題は英語で読む必要があります。英語が苦手な方は翻訳しながら読むことを推奨しますが、サービスを使うときのハードルになる場合もあります。

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

この記事では、LeetCodeの使い方について解説します。
コンテストに関する情報ではなく、好きな問題を探して解く自習を想定しています。

LeetCodeを使い倒す① ~入門編~

  • LeetCodeとは
  • 問題を探す
  • 問題を解く
  • ソースコードをテストする
  • 解答を提出する

次は下記の記事を書く予定です。
LeetCodeを使い倒す② ~初級編~

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

その他、需要があれば今後は下記のような記事を書きたいと思っています。

  • LeetCodeを用いた効率的な勉強の仕方
  • 初学者が取り組むのに良さそうな問題のリスト
  • その問題の分類や学習方法について

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

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

LeetCodeとは

グローバルに有名な競技プログラミングサービスです。日本では競プロサービスといえばAtCoderが非常に有名ですね。LeetCodeもコンテストを定期的に開催しているという点では同じようなサービスですが、「教育」を大体的に謳っていて、GAFAなど外資系の企業のコーディング面接の準備のために使われる王道のサービスとなっていることが特徴的です。なお、外資系企業の面接で出された問題がそのまま掲載されていることがある点については賛否両論あります。

LeetCodeでは、コンテストに出場しなくても、レベル別、使用アルゴリズム別等様々な切り口で問題を分類してまとめてあったり、コーディング面接を実施している企業のモックインタビューをすることができたり、自分の目的に合わせて学ぶことができます。
基本的に無料で使えますが、問題や解説、また一部の機能には、有料会員しかアクセスできないものもあります。個人の見解ですが、コーディング面接対策をしたい人は有料会員限定の機能が欲しくなるかもしれません

問題を探す

問題を探してみましょう。まずはトップ画面上部にある、「Problems」をクリックします。
下図のような問題一覧画面になります。

問題のタイトルの横に鍵マークがついているものは、有料会員でないと見ることができません。
問題ごとにSolution、Acceptance、Difficultyが書かれており、Frequencyは有料会員になると見ることができます。それぞれが何を示しているのかは下記の通りです。

  • Solution
    下記を表しています。
    • その問題に解説があるか
    • ある場合は、ビデオによる解説があるか
  • Acceptance
    その問題に対して提出された解答のどの程度がテストをクリアしたかだと思われます。難易度と必ずしも連動していないことがあります。
  • Difficulty
    その問題の難易度です。
    LeetCodeの問題にはEasy、Medium、Hardの3種類の難易度があり、この分類が非常に良くできています。Easyの問題はアルゴリズムを知っていれば〜10分程度で解けるものがほとんどですが、Medium、Hardになると明確にレベルが上がります。
  • Frequency
    その問題がコーディング面接で実際に出された頻度だと思われます。

自分の中で消化できないままいろんな問題を解いても実力は伸びにくく、ストレスがたまるので、できるだけ自分の手を動かして解ける程度の難易度の問題からチャレンジしてみましょう。

問題のフィルター

この問題一覧画面は、Difficulty、Status、Lists、Tagsでフィルターすることができます。フィルター機能を活用し、自分が解きたい問題を見つけてみましょう。

  • Difficulty
    Easy, Medium, Hardから選べます。
  • Status
    Todo(まだ解答したことがない問題), Solved(既に正解したことがある問題), Attempted(解答したが正解に至らなかった問題)から選べます。
  • Lists
    「リスト」という、任意の問題のグループ分けができる機能があり、そのリストに含まれるものだけを表示できます。
  • Tags
    予め問題に割り当てられているタグでフィルターすることができます。アルゴリズム別、データ構造別にタグが貼られています。
    有料会員になると、その問題を面接で出した企業名でフィルターすることもできます。

問題を解く

LeetCodeでは、問題を解くソースコードを書いて提出すると、オンラインで実行結果が評価されます。

問題を解く時の画面は、下図のような構成になっています。
問題画面には、左半分に問題が、右半分に解答用のスペースがあります。

問題文に続いて、Example(与えられるInputと導出されるべきOutputの例)とConstraints(制約。inputの大きさや条件など)が記載されています。

画面左半分を読み、コードが思い浮かんだら、言語を自分が使用するものに変更し、ソースコードを書いてみましょう。解答欄には、関数名と引数(Input)、型が存在する言語の場合は返り値の型が予め記載されています。
ソースコードを提出する時は、右下の「Submit」ボタンを押します。上図では、ソースコードを間違え、テストに通らなかったため、通らなかったテストのInputと期待されるOutputが表示されています。

ソースコードをテストする

次に、Submitボタンの左にある、「Run Code」ボタンについて説明します。これは、提出前にソースコードを簡単にテストする機能です。
標準出力に検証したい値を表示することや、テストケースを自分で作成して試すこともできます。画面左下にある、「Console」をクリックし、「Testcase」タブをクリックすると、画面右半分が下図のようになります。

Testcaseタブの記入欄には、InputとOutputの組み合わせを改行を入れながら記載します。上図の例は、「Input:1, Output:2」と、「Input:2, Output:3」の2つのテストケースが「Run Code」により実行されることを示しています。

まとめると、「Submit」ボタンと「Run Code」ボタンの違いは下記の通りになります。

  • 「Run Code」ボタン
    「Testcase」タブに登録されたテストデータを用いてソースコードを走らせます。実行結果は記録されません。
  • 「Submit」ボタン
    準備された複数のテストデータを用いてテストします。実行結果が「Submission」タブに記録されます。

解答のソースコードを提出する

ソースコードを解答欄に記載してSubmitボタンを押すと、下図のような画面になります。

画面の左半分が解答のソースコードを実行した結果です。
上半分に実行したコードのランタイムとメモリ使用量、それらが他のユーザーが提出した解答と比較してどの程度早かったかが表示されます。
下半分には、これまで自分が提出した解答結果が表示されます。Acceptedは全てのテストをパスしたという意味で、他にも、テストを規定時間内にパスできなかった、もしくは実行に失敗したなどの場合もここに表示されます。

提出したソースコードは実行結果とパフォーマンスも一緒に保存され、「Submissions」タブのページで見ることができます。


需要がありそうだったら続編を書こうと思います。
❤️を押していただけると励みになります。