
「LeetCode」の学び方
プログラマーの就職活動でおこなわれているコーディング面接。
その面接でつかわれる問題の学習サイトが「LeetCode」です。
GAFAの外資系企業の面接対策として有効とされています。
ぼくも一カ月ほどまえに「LeetCode」での学習をはじめ、10問ほど解き終わりました。

今回は、「LeetCode」での学習の仕方をまとめます。
目標は「九九」のようにできるようになること
以前42Tokyoにて開かれたイベントで、元Google社員の人たちが、ずばり「どうやったらGoogleに入社できるのか?」を伝授する、というものがありました。
そのなかで印象的だったのが、「コードを九九のように、苦もなくできるようになる」こと。
そのための訓練として、「LeetCode」がオススメされていました。
LeetCodeのなかでもおすすめの問題集は以下で、良問ぞろいとのことでした。
Arai 60: https://leetcode.com/list/xo2bgr0r/
Blind 75: https://leetcode.com/list/xi4ci4ig/
つづいて、九九のように問題が解けるようになるための戦略をみていきます。
まずは「easy」から
LeetCodeの問題にはそれぞれ3つのレベルが存在します。
それは「easy」「medium」「hard」。
まずは「easy」で基礎的な考えを身につけることによって理解の足場ができ、「medium」に取り組むことが容易になります。
ぼくは問題集の順番通りに解いていたのですが、このことに最近気づきました。
あと、上記の問題集では、それぞれの問題のページに飛ばなければ難易度がわからないので面倒だなと思っていました。
しかし以下のようなそれぞれの問題を解くページで、左上の「問題集のタイトル」をクリックすると、それぞれの問題の難易度の一覧が表示されます。


このリストは「easy」の問題を見つけるのに便利です。
毎日触れる
九九のように慣れるには、分散学習が有効です。
分散学習とは、時間をおいて学習すること。
1週間のうち、日曜日に3.5時間集中してやるのではなくて、毎日30分をつづけたほうが効果的です。
現在、毎朝30分ほどLeetCodeに時間を使っています。
分からなければ、他人の答えを確認
LeetCodeでは、他の人が投稿した答えを確認できます。
答えがわからなければ、いくら考えても時間がムダなので、他の人の投稿のなかで投票が多い(他の人から支持されている)トップ3の解答をチェック。
3つ確認するのは、いろいろな考えを知ることが大切だからです。
自力で問題を解けた場合も、トップ3の解答をチェックして、コードをブラッシュアップします。
問題を解くことと、コードを書くことを分ける
問題を解くことと、そのソリューションをコードに落とし込むことは別物です。
ついつい最初からコードを書こうとしてしまいますが、まずは「問題を解くこと」に集中したほうが効率的です。
5問ずつ九九状態にしていく
まずは時間をかけて、他の人のコードも参考にしながらコードをといていきます。
5問解けたところで最初の問題にもどり、時間を計りながら、答えを見ずに解きます。
そしてこれを、「これ以上は早く書けない!」というぐらいまで繰り返します。
面倒臭いとも思わなくなり、手が勝手に動くレベルを目指します。
それが「九九のように、苦もなくできる」レベル。
毎日の学習時間である30分以内に、5問すべて解けるようになるのが目標です。
(長いコードを書く必要がある場合、比例して時間も必要となるので、30分というのはあくまでも目安で、5問の難易度によります。)
違う言語で解いてみる(オプション)
これはオプションですが、ひとつのプログラミング言語で九九のように解くことができるようになったら、他の使える言語でも同じ問題を解いてみます。
これは九九のように解くというよりも、他の言語を使う機会を設け、その言語を忘れないための取り組みです。
現在ぼくはC++を使って解いていっているので、それが終わったら、C言語、そしてJavaScriptで解いていこうと思っています。
いいなと思ったら応援しよう!
