HackerRankのアルゴリズム厳選20問でコーディング面接を対策する【Pythonコード付き】

HackerRankのCracking the Coding Interview

https://www.hackerrank.com/domains/tutorials/cracking-the-coding-interviewwww.hackerrank.com

HackerRankという、世界中のハッカー(=ソフトウェアエンジニア・機械学習エンジニアなど)が、プログラミング課題を解決するサイトがあります。

そこに「Cracking the Coding Interview」といういかにもコーディング面接対策といった風情のチュートリアルがあるのですが、初心者がプログラミングのためのアルゴリズムを学ぶのに素晴らしい教材だと感じたので紹介します💁‍♂️

Cracking the Coding Interviewの良さみ

課題の質が高い

まず、かの「Cracking the Coding Interview」(日本では「世界で闘うプログラミング力を鍛える本」)の著者であるGayle Laakmann McDowellが監修しており、課題の質が非常に高いです。難易度設定が適切で、初心者でも考えやすい適度な難易度になっています。

類書などのように「1章からいきなりむずすぎワロタ・・・」となりません🐜たとえば、以下の問題を見てみてください。

入力が1, 1, 3なら出力は3

入力が0, 0, 1, 2, 1なら出力2

など、入力の中で「1つしかない数字」を見つけて出力せよ

ただし「1つしかない数字」以外はすべて2回ずつ表れる

(Bit Manipulation: Lonely Integer)

(※問題文修正 2018/08/02)

この問題は、問題タイトルにもある通り本来はビット演算を使って解くことが想定されているのですが、ハッシュなどを駆使すれば何とか解答することができそうですよね🤔

このように、想定解となるアルゴリズムを知らなくても取り掛かりやすい程度のレベルに調整されています。

Cracking the Coding Interview: 189 Programming Questions and Solutions

Cracking the Coding Interview: 189 Programming Questions and Solutions

解説の質が高い

さらに、解答は動画付きで丁寧に解説されていて、コードとにらめっこしていてもわからないようなアルゴリズムのかんどころを視覚的に説明してくれています。

アルゴリズムは、言葉で聞くと難しく感じてもビジュアルで理解するとすんなりわかることも多いため、動画が付いてくるのは非常にありがたいです。

以下は上記の問題の解説動画です。ご覧頂ければどれだけ詳しく解説してくれるかわかるかもしれません。

ちなみに、ハッシュを使った解答もビット演算を使った解答も解説してくれていて、「なるほど、そう解けば良かったのか💡」と理解が丁寧に促されます。

www.youtube.com

問題が厳選されている

問題が20問に厳選されていて、短期集中的に取り組みやすいです。私は週末で一気に終わらせました。

書店で分厚いアルゴリズム本を買ってきて「アルゴリズムおおすぎワロタ・・・」となった経験がある方には特におすすめです😇

具体的には、以下の全20題に厳選されています。

  • データ構造

    • 配列:左回転をする
    • 文字列:アナグラムをつくる
    • ハッシュ:身代金要求
    • 連結リスト:循環を見つける
    • スタック:括弧のバランスをとる
    • キュー:ふたつのスタックの物語
    • 木構造:二分探索木
    • ヒープ:逐次的に中央値を求める
    • トライ木:連絡先
  • アルゴリズム

  • テクニックおよび概念

単純に解いていて楽しい問題も多いためモチベーション維持にもGoodでした。

議論が闊達に行われている

問題ごとに設定されているディスカッションタブというのを開くと、各言語での実装例や、他の人の解法・考え方を学ぶことができます。

他サイトと比べてもわりと議論がアクティブなため、どうしてもわからないことがある場合があっても質問すれば回答が返ってくることが多いです。私は質問を投稿して半日以内に返信が来ました🙏

おわりに+Python3での実装例

アルゴリズムはプログラミングに登場するさまざまな概念の基礎になっていることが多いので、このような教材で集中的に学んでおくのがよいと感じます。

私はデータアナリストでふだんPythonを使って分析を行うことが多いため、Python3で挑戦してみました。GitHubにあげておいたので、Pythonでトライしてみようという方は参考にしてみてください|д゚)

github.com