はじめに
「アルゴリズム問題を解く理由ってなんですか?」
私の周りでは「プログラミング勉強」特に「コーディング試験対策」という方が多いです。
では私自身はというと、「役に立つ」とは違うモチベーション・マインドかなと思います。
言うならば「宝探しマインド」です。
未知の問題へ出港!! |
---|
アルゴリズム問題ってこんなもの
// 解答(一例)
function evenOrOdd(number) {
return number % 2 === 0 ? 'Even' : 'Odd';
}
【アルゴリズム問題】がもたらしてくれるもの
アルゴリズム問題をやると…
なんだかすごそうな解答を発見! |
---|
※実際の解答です。詳しくはこちら |
「これ、すごくないですか!?」(交流のきっかけ) |
---|
これはぜひ紹介したい!(記事を書くきっかけ) |
---|
"アルゴリズムできて発信もできる人" |
---|
つまり…
◆ 「自分だけの発見」があります
自分の行動が産んだ、自分だけの「発見」です。
◇ 技術ネタになります
「発見」はすなわち「技術ネタ」になります。
◆ 誰かと共有したくなり、交流が生まれます
思わず話したくなる問題・解答がそこら中にあります。
「この解答すごい!」だけでなく
「なんでこれが動くんだろう?」「わからない!」もあるでしょう。
◇ エンジニアとの「雑談のネタ」になります
雑談ネタがあれば、交流会も怖くないかも。
◆ 技術記事を書く「きっかけ」になるかもしれません
「書くネタがない」はよく聞きますが、
「問題・何が難しいか・すごいと思った解答・なぜすごいか」
これだけで記事になります。
◇ 記事を書き、技術雑談すると、うっすら「できる人」に見えます
ITエンジニア界隈の多くは、アウトプットできるだけで「すごい」と言ってくれます。
アウトプットすることで、相手があなたに話しかけるきっかけにもなります。
もちろんこれだけではありません。
コードが洗練される
アルゴリズム問題・そして他人の解答を見ることで、「こんなスマートに書けるんだ!」という発見があります。
私のコードを洗練させたのは、例えば以下との出会いです。
- 関数型プログラミングとの出会い ➪ Haskellへの挑戦と学び
- 再帰という書き方
-
for
ではなくmap
を使う
昔と今の比較
実際に、過去と現在を比較してみましょう。
昔解いた問題に再挑戦してみました。
昔の解答
function sumTwoSmallestNumbers(numbers) {
const numbersMin = function(a, b) {return Math.min(a, b);}
let Min1 = numbers.reduce(numbersMin);
let i = numbers.indexOf(Min1);
numbers.splice(i,1);
let Min2 = numbers.reduce(numbersMin);
return Min1 + Min2;
}
長い・無駄が多い・処理が追いにくい・共通化しきれてない
パッと見てウッとなるコードです。
今の解答①(可読性重視)
function sumTwoSmallestNumbers(numbers) {
const sorted = numbers.sort((a, b) => a - b)
return sorted[0] + sorted[1]
}
超シンプルで、何をやっているのか一目瞭然です。
今の解答②(1つのメソッドチェーンで記述)
const sumTwoSmallestNumbers = numbers =>
numbers.sort((a, b) => a - b).slice(0, 2).reduce((a, b) => a + b);
こちらは個人的に「美しい」と思えるコードです。
Qiitaだと見にくいので2行にしてますが、本来1行のコードです。
【アルゴリズム問題】を最大限楽しむために
ここまで読んでいただいた方に、改めて伝えたいこと。
それは、「他人の回答から学ぶ」ことの価値です。
私にとって、「アルゴリズム問題を解くこと」と「他人の回答から学ぶこと」はセットです。
自分が解くだけでは、「自分だけの発見=宝物」は見つかりません。
ということで「CodeWars」というサイトがオススメです!!
他人の解答が見られる! |
---|
「CodeWarsの始め方」はこちら
少し読みにくいですが、丁寧に書かれている記事です。
「オススメな理由」をもっと知りたい方はこちら
他のアルゴリズム学習サイトと比較して、オススメな理由を紹介しています。
おわりに
簡素な内容ですが、「このメソッドを覚えておけば間違いないよ」を書きました。
アルゴリズム問題を楽しむ一助になれば幸いです。
お読みいただき、ありがとうございました。