ホーム > LeetCode初心者ガイド - 登録から最初の100問までの進め方

LeetCode初心者ガイド - 登録から最初の100問までの進め方

この記事のまとめ

  • LeetCodeはアルゴリズム学習とコーディング面接対策の両方に使える世界標準のプラットフォーム
  • 無料プランでも十分に学習でき、Easy問題から段階的にカテゴリを攻略するのが効率的
  • 100問を3〜4か月かけて計画的に解くことで、面接に必要な基礎力が身につく

LeetCodeとは何か - エンジニアが集まる世界最大の問題集

LeetCodeは、アルゴリズムとデータ構造の問題をオンラインで解けるプラットフォームとして、世界中のエンジニアに利用されている。2015年ごろから急速に利用者が増え、GAFAMをはじめとするテック企業のコーディング面接対策として定番の存在になった。問題数は3000問を超え、面接で出題された問題のタグ付けがされているのが大きな特徴だ。

そういえば、LeetCodeを「ただの問題集」と思っている人も多いかもしれない。けれど実際に使ってみると、問題を解くだけでなく、他の人の解法を読んだりDiscussionで議論を追ったりすることで、自分では思いつかないアプローチに出会える場所でもある。英語が中心のプラットフォームではあるが、問題文自体はシンプルな英語で書かれているので、プログラミング経験がある人なら読むのにそれほど苦労しないはずだ。

日本ではAtCoderの人気が高いが、海外のテック企業を目指すならLeetCodeは避けて通れない。国内企業でもコーディングテストにLeetCode形式の問題を採用するところが増えてきている。つまり、LeetCodeで練習しておくことは、国内外を問わずエンジニアとしてのキャリアを広げる土台作りになるわけだ。

アカウント登録と初期設定 - 5分で始められる

LeetCodeのアカウント登録は驚くほどシンプルだ。公式サイトにアクセスして、メールアドレスとパスワードを入力するか、GitHubアカウントやGoogleアカウントで連携するだけで完了する。個人的にはGitHubアカウントでの連携がおすすめで、開発者としてのプロフィールに統一感が出る。

登録が終わったら、プロフィール設定でプログラミング言語を選んでおこう。Python、Java、C++、JavaScriptなど主要な言語はすべてサポートされている。言語を設定しておくと、問題を開いたときに自動的にその言語のテンプレートが表示されるので、いちいち切り替える手間が省ける。面接で使う予定の言語を設定しておくのが賢い選択だ。

もうひとつやっておきたいのが、Daily Challengeの通知設定だ。LeetCodeでは毎日1問、その日のおすすめ問題が出題される。これをメールで受け取るように設定しておくと、「今日も1問解こう」というリマインダーになる。学習の習慣化は、アルゴリズム学習で最も大切なことのひとつだからだ。

無料プランと有料プラン - 課金すべきかどうか

LeetCodeには無料プランとPremiumプラン(月額約35ドル、年間プランだと月額約13ドル)がある。無料プランでも約2000問以上の問題にアクセスでき、コードの実行やSubmitも制限なくできる。Discussion欄で他の人の解法を読むこともできるので、学習に必要な機能は一通り揃っている。

Premiumプランの目玉は、企業別の出題問題リストだ。「GoogleでよくでるTop 50問」「Amazonの頻出問題」といった具合に、特定企業の面接で過去に出された問題がリスト化されている。特定の企業を狙って面接対策をするなら、この機能には確かに価値がある。ただし、まだどの企業を受けるか決まっていない段階や、アルゴリズムの基礎を固めている最中なら、無料プランで十分だ。

ところで、Premiumプランにはもうひとつ便利な機能がある。それは公式の解説(Solution)だ。無料プランでも一部の問題には公式解説がついているが、Premiumならすべての問題に対して丁寧な解説が読める。とはいえ、YouTubeやNeetCodeのようなサイトで無料の解説動画が充実しているので、必ずしもPremiumでなくてもカバーできる。お財布と相談しながら判断してほしい。

Easy問題から始める理由 - 自信と基礎を同時に手に入れる

LeetCodeの問題はEasy、Medium、Hardの3段階に分かれている。アルゴリズム初心者がいきなりMediumに挑戦するのは、準備運動なしでフルマラソンを走るようなものだ。Easyから始めることで、問題を読み、アプローチを考え、コードに落とし込み、テストケースを通すという一連の流れに慣れることができる。

Easy問題が「簡単」かというと、そうでもない場合がある。Two SumやValid Parenthesesのような有名問題は確かにシンプルだが、Easyの中にもハッシュマップやスタックの理解がないと解けない問題がしっかりある。つまり、Easy問題を通じてデータ構造の基本的な使い方を自然に身につけられるのだ。

もうひとつ見逃せないのが、「問題を解ききる体験」の価値だ。プログラミング学習でありがちな挫折パターンは、難しい問題に手を出して全く歯が立たず、やる気を失ってしまうことにある。Easy問題を何問か連続で解いて「Accepted」の緑色の文字を見ると、素直にうれしいし、もう1問やってみようという気持ちになる。この小さな成功体験の積み重ねが、長期間の学習を支える原動力になる。

おすすめの学習カテゴリと進め方 - 配列からDPまで

アルゴリズム学習には効率的な順序がある。いきなりグラフや動的計画法に飛びつくのではなく、基礎的なデータ構造から段階的にステップアップしていくのが王道だ。ここでは、実際に多くのエンジニアが実践しているカテゴリ別の進め方を紹介する。

配列(Array)は最初に取り組むべきカテゴリだ。配列はプログラミングの最も基本的なデータ構造であり、ほぼすべての他のカテゴリの土台になる。Two Sum、Best Time to Buy and Sell Stock、Contains Duplicateといった定番問題を通じて、ループの回し方や条件分岐、計算量の考え方といった基本スキルが鍛えられる。配列の問題を15問ほど解くと、LeetCodeの操作にも慣れてくるはずだ。

配列に慣れたら文字列(String)に進もう。文字列操作はどのプログラミング言語でも頻繁に使うスキルで、面接でも定番の出題カテゴリだ。Reverse String、Valid Anagram、Longest Common Prefixなどを解きながら、文字列の走査やパターンマッチングの感覚を掴んでいく。配列で培ったループの扱いがそのまま活きるので、スムーズに進められるだろう。

リンクドリストから木構造へ

リンクドリスト(Linked List)は、配列とは異なるデータの持ち方を学ぶうえで欠かせないカテゴリだ。ノードとポインタの概念は、木やグラフといったより高度なデータ構造を理解するための基礎になる。Reverse Linked List、Merge Two Sorted Lists、Linked List Cycleの3問は必ず解いておきたい。ポインタの操作に最初は戸惑うかもしれないが、紙に図を描きながら考えるとイメージが掴みやすくなる。

二分探索(Binary Search)は、「ソートされたデータの中から素早く目的の値を見つける」という考え方を学ぶカテゴリだ。Binary Searchそのものはシンプルなアルゴリズムだが、応用範囲が広い。Search Insert Position、First Bad Version、Search in Rotated Sorted Arrayといった問題を通じて、左端と右端を絞り込んでいく感覚を身につけてほしい。二分探索のパターンが見えるようになると、Medium問題が一気に解きやすくなる。

木(Tree)は面接での出題頻度が非常に高いカテゴリだ。二分木の走査(前順、中順、後順)を理解することが出発点になる。Maximum Depth of Binary Tree、Invert Binary Tree、Validate Binary Search Treeは鉄板の3問で、再帰の考え方が自然と身につく。再帰に苦手意識がある人も、木の問題を何問か解くうちに「あ、こういうことか」と腑に落ちる瞬間が来るはずだ。

グラフとDP - 面接の山場

グラフ(Graph)は、木をさらに一般化したデータ構造だ。SNSの友人関係や地図の経路探索など、現実世界の問題をモデル化するのに使われる。DFS(深さ優先探索)とBFS(幅優先探索)の2つの走査方法を確実に使いこなせるようにしておこう。Number of Islands、Clone Graphといった問題が入門として最適だ。

動的計画法(DP)は多くの人が「難しい」と感じるカテゴリだが、避けて通るわけにはいかない。面接でのDP問題はパターンが限られているので、よく出るパターンを押さえておけば対応できる。Climbing Stairs、House Robber、Coin Changeの3問から始めて、「状態の定義」と「遷移式の立て方」に慣れていこう。DPが得意になると、「この問題、部分問題に分解できるな」と直感的に見えるようになり、問題解決の幅がぐっと広がる。

100問の選び方 - 質を重視した問題セット

100問をやみくもに解くより、厳選された100問を解くほうがはるかに効率的だ。インターネット上にはさまざまな「LeetCode 100選」「Blind 75」「NeetCode 150」といったキュレーションリストが公開されている。これらは現役エンジニアやコーチが面接頻出問題を分析してまとめたものなので、自分で問題を選ぶよりも質が担保されている。

おすすめの配分としては、Easy25問、Medium60問、Hard15問を目安にするとよい。Easy問題で基礎を固め、Medium問題で応用力を養い、Hard問題で「本番で難しい問題が出ても心が折れない耐性」を身につけるイメージだ。Hard問題は全部解けなくても構わない。解説を読んでアプローチを理解するだけでも、思考の幅が広がる。

そういえば、「同じ問題を何度も解く」ことの価値を軽視している人が多い。1回解いてAcceptedが出たら終わり、ではもったいない。1〜2週間後にもう一度同じ問題を解いてみると、前回は思い出しながら書いたコードがスラスラ書けるようになっていたり、逆に全く覚えていなかったりする。覚えていなかった問題こそ、復習すべき問題だ。この「間隔反復」の考え方を取り入れると、100問を解いた後の定着度が段違いになる。

1問にかける時間の目安 - 考えすぎない勇気

問題に取り組む際の時間管理は、多くの初心者が見落としがちなポイントだ。ひとつの問題に何時間も粘って結局解けないという経験は、誰しもある。目安として、Easy問題なら15〜20分、Medium問題なら30〜40分、Hard問題なら45〜60分を制限時間として設定しておくとよい。

制限時間を過ぎても解法の糸口すら見えない場合は、潔く解説を見よう。これは「負け」ではなく、「効率的な学習」だ。解説を読んでアルゴリズムの考え方を理解し、それを自分のコードで再現する。このプロセスを経ることで、似たパターンの問題に出会ったときに解法が浮かぶようになる。解説を見ずに何時間も唸り続けるよりも、30分考えて15分で解説を読み、15分で自力実装するサイクルのほうが、同じ1時間でも得られるものが大きい。

ところで、実際の面接でも時間は限られている。45分の面接で2問出されることもある。日頃から時間を意識して問題に取り組む癖をつけておくと、本番でも焦らずに進められる。タイマーをセットして問題を解く習慣は、面接本番へのシミュレーションにもなるのだ。

問題を解くときのプロセス - 手を動かす前に頭を動かす

LeetCode初心者がやりがちなのは、問題文を読んだらすぐにコードを書き始めることだ。しかし面接で評価されるのは、いきなりコードを書く速さではなく、問題を分析し、適切なアプローチを選び、それを説明しながら実装する力だ。日頃の練習から「考えてから書く」習慣を身につけておくと、面接でも自然にそれができるようになる。

具体的なプロセスとしては、問題文を読んだらまず入力と出力の関係を把握し、エッジケース(空配列、負の数、重複要素など)を洗い出す。それからブルートフォース(力任せ)の解法を考え、その計算量を見積もる。ブルートフォースの計算量が許容範囲なら実装に移り、そうでなければ最適化のヒントを探す。このステップを毎回意識的に踏むことで、問題分析力が確実に向上する。

コードを書き終えたら、テストケースを手動で追って動作を確認しよう。LeetCodeにはRun Code機能があるが、それを押す前に自分の目でコードを追うことが大切だ。「この変数がこの値のとき、この条件分岐に入って…」とトレースしていく作業は、バグの発見だけでなく、コードの動作を深く理解することにもつながる。この習慣を持っている人と持っていない人では、デバッグ速度に大きな差が出る。

学習を継続するためのコツ - 毎日の小さな積み重ね

アルゴリズム学習で最も難しいのは、継続することだ。最初の1〜2週間はモチベーション高く取り組めるが、3週間目あたりから「今日はいいかな」という気持ちが顔を出し始める。これを乗り越えるには、学習の「量」よりも「頻度」を重視する発想が有効だ。毎日3問解く週と、週末にまとめて10問解く週では、トータルの問題数は後者が多いが、定着度は前者のほうが高い。

LeetCodeのStreak機能は、継続のモチベーション維持に役立つ。毎日1問以上解くと連続記録が伸びていき、これが途切れるのが嫌で「今日も1問だけ解こう」という気持ちになれる。些細なことに思えるかもしれないが、この小さな仕組みが学習習慣の定着に効く。60日、90日とStreakが伸びていくと、それ自体が自信にもなる。

一緒に学ぶ仲間を見つけるのも有効な方法だ。社内の勉強会やオンラインのDiscordコミュニティなど、LeetCodeに取り組んでいるエンジニアのコミュニティは数多くある。同じ問題について「自分はこう解いた」「あの解法はこういう理由で効率がいい」と話し合える環境があると、ひとりで黙々と解くよりも理解が深まるし、何より学習が楽しくなる。孤独な作業になりがちなアルゴリズム学習に、仲間の存在は想像以上の力を与えてくれる。

面接本番を見据えた練習法 - 解くだけでは終わらない

LeetCodeの問題を解くことは手段であって目的ではない。ゴールは面接で実力を発揮することだ。そのためには、ただ問題を解くだけでなく、面接を意識した練習を取り入れる必要がある。具体的には、解法を声に出して説明しながらコードを書く「ホワイトボードシミュレーション」が効果的だ。

自分の考えを言葉にしながらコーディングするのは、慣れないうちはかなりぎこちない。「ここでハッシュマップを使って、各要素の出現回数を記録します」「ループの中で、ターゲットとの差分がハッシュマップにあるかを確認します」といった具合に、思考プロセスを実況中継するイメージだ。面接官は正解にたどり着くまでの思考過程を見ているので、この「考えを言語化する力」は結果を大きく左右する。

100問を解き終える頃には、典型的なパターンが体に染みついているはずだ。配列の問題を見たら「ソートするか、ハッシュマップを使うか」と自然に考え、木の問題を見たら「再帰で解くか、反復で解くか」と選択肢が浮かぶようになる。ここまで来れば、面接で初見の問題が出ても、過去に解いた問題の応用として捉えられるようになる。LeetCodeの100問は、あなたのエンジニアとしての引き出しを確実に増やしてくれるだろう。

まとめ

LeetCodeは、アルゴリズム学習とコーディング面接対策の両面で、エンジニアにとって欠かせないツールだ。無料プランで十分に学習を始められるし、カテゴリ別に段階的に進めることで効率よく実力を伸ばせる。Easy問題で自信をつけ、配列から動的計画法まで体系的にカテゴリを攻略し、100問を解き切ることが最初の大きなマイルストーンになる。

大切なのは、毎日少しずつでも手を動かし続けることだ。問題を解く時間を決め、解けなければ解説から学び、定期的に復習するサイクルを回していこう。面接を意識した「声に出しながら解く」練習も忘れずに取り入れてほしい。LeetCodeでの100問は、エンジニアとしてのキャリアを切り拓く確かな一歩になるはずだ。

IT転職で年収アップを実現しませんか?

エンジニア・プログラマー向け転職エージェントで、理想のキャリアを手に入れましょう。

おすすめ転職サイトを見る