21
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RUNTEQAdvent Calendar 2024

Day 1

アルゴリズム問題は「宝探しマインド」で楽しむ!

Last updated at Posted at 2024-11-30

はじめに

「アルゴリズム問題を解く理由ってなんですか?」


私の周りでは「プログラミング勉強」特に「コーディング試験対策」という方が多いです。


では私自身はというと、「役に立つ」とは違うモチベーション・マインドかなと思います。

言うならば「宝探しマインド」です。

未知の問題へ出港!!
アルゴリズム問題ってこんなもの

問題:「数値を与えるので、奇数か偶数かを返してね」

// 解答(一例)

function evenOrOdd(number) {
  return number % 2 === 0 ? 'Even' : 'Odd';
}

【アルゴリズム問題】がもたらしてくれるもの

アルゴリズム問題をやると…

なんだかすごそうな解答を発見!
スクリーンショット 2024-11-09 8.09.41.png
※実際の解答です。詳しくはこちら
「これ、すごくないですか!?」(交流のきっかけ)
これはぜひ紹介したい!(記事を書くきっかけ)
"アルゴリズムできて発信もできる人"
image.png

つまり…

◆ 「自分だけの発見」があります

自分の行動が産んだ、自分だけの「発見」です。

◇ 技術ネタになります

「発見」はすなわち「技術ネタ」になります。

◆ 誰かと共有したくなり、交流が生まれます

思わず話したくなる問題・解答がそこら中にあります。

「この解答すごい!」だけでなく

「なんでこれが動くんだろう?」「わからない!」もあるでしょう。

◇ エンジニアとの「雑談のネタ」になります

雑談ネタがあれば、交流会も怖くないかも。

◆ 技術記事を書く「きっかけ」になるかもしれません

「書くネタがない」はよく聞きますが、

「問題・何が難しいか・すごいと思った解答・なぜすごいか」

これだけで記事になります。

◇ 記事を書き、技術雑談すると、うっすら「できる人」に見えます

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」というサイトがオススメです!!

他人の解答が見られる!
スクリーンショット 2024-11-09 11.43.09.png

「他人の解答から学ぶ」にはベストなサイトです。

◆ ユーザー同士の投票機能

「評価の高い解答」にフォーカスして学ぶことができます!

◇ 「Best Practice(実用的)」と「Clever(天才)」の2つの評価

Best Practice」からは「基礎的なテクニック」

Clever」からは「美しさ」「遊び心」そして思わず話したくなる発見

ーーを得ることができます。

「CodeWarsの始め方」はこちら

少し読みにくいですが、丁寧に書かれている記事です。

「オススメな理由」をもっと知りたい方はこちら

他のアルゴリズム学習サイトと比較して、オススメな理由を紹介しています。


おわりに

簡素な内容ですが、「このメソッドを覚えておけば間違いないよ」を書きました。

アルゴリズム問題を楽しむ一助になれば幸いです。

お読みいただき、ありがとうございました。

21
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?