strt's blog

🗒🔨🙍

LeetCodeを100問解き終わったので振り返る

2024/12/31

今年の3月ごろから、LeetCodeの問題を解き続けていたのですが、100本解くことができたので振り返ります。

Easy50, Medium49, Hard1です。

leetcode

やろうと思った動機

  • 今年は仕事をしていない期間があり、コードを少しでも書いて能力の低下を防ぎたかった
  • 「アルゴリズム」という言葉にコンプレックスがあったため、触れておきたかった
  • ついでにコーディングテスト対策

なお、言語は基本的にPython3でやってました。

進め方

一人で進める時

時間ないときなどはとりあえずPassで済ませてたりもしますが、一旦。

  • まずは問題を解いてPassする
    • 通すために汚く書いちゃったりしたがここでは問わない
  • その後にリファクタリングしてPassする
  • AIにレビューをもらう
  • 実装内容をメモ書き程度のテキストでまとめる
    • これは記録用のアプリを作って記録していました。

複数人で進める時

コミュニティや、会社の人と「LeetCodeを解く会」と称して、お互いの実装を見せ合う会に参加したり、主催したりすることもあったのですが、その時は+αで以下のこともしていました。

  • 実装意図をコメントに明記する
  • 実装内容の説明
  • プロダクトコードチックに書いてみる(変数名を明確にする、クラスを定義する、関数に処理を分割するなど)

効果

LeetCodeを解いたことによる直接的な効果

  • アルゴリズムへの抵抗感がなくなると同時に、いくつかの手法を体感することができた
    • 一度理解しているので、忘れてしまっても軽い調べ直しですぐわかる状態にはできている
  • 使用言語の仕様や標準ライブラリの動きを掴めた
    • dict型って順序保持するんだっけ(Python3.7以降は保持する)とか、heapqってどんな感じで使うのか、とか。
  • コーディングテストの抵抗感は下がった
    • (観測範囲では)コーディングテストはMediumより簡単くらいなものがよく出るので、あまり臆せず挑めるようになった
    • 通過率もそれなりにあった

複数人で進めたことによる間接的な効果

  • 自分の考えたアルゴリズムの仕組みを説明する機会が生まれた
    • 説明を行う為に頭の中で再整理するので、解きっぱなしにならない
  • 他の人の実装例などを見ることができた
  • 共通の話題としてエンジニア同士であればとっかかりやすく、コミュニケーションの活性化が図れた

今後

おそらく今後は上記の効果を実感することも少なくなっていくとは思うのですが、基礎トレーニングのようなものなので、週に1問くらいのペースでは引き続き解いていくつもりでいます。

Hardは悪問もあると聞きますが、たまに挑戦してみてもいいかなとは思いました。