皆さんこんにちは。システム部のよわよわエンジニア、ダラーです。
今回はleetcodeを使ったアルゴリズムとデータ構造の勉強法について書いてみようと思います。
目次
1.アルゴリズムとデータ構造って?
2.アルゴリズムの勉強のコツ
2-1.【leetcode】解く問題を決める
2-2.【leetcode】カテゴリで選ぶ
2-3.【leetcode】これだけ解いておけばOK!効率的にアルゴリズムとデータ構造が学べる問題紹介
2-4.【leetcode】解く時間を測る
2-5.【leetcode】解説読解後、問題に再挑戦
2-6.【leetcode】解説は全部読む
2-7.【leetcode】解説がそもそもわからないときは?
2-8.Pythonでやってみる(おまけ)
2-9.ロードマップを参考にする(おまけ)
3.「アルゴリズムとデータ構造」おすすめの解説本
3-1.プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
3-2.「プログラミングコンテストチャレンジブック」
3-3.「世界で闘うプログラミング力を鍛える本」
3-4.「なっとく!アルゴリズム」
3-5.「プログラマの数学」(おまけ)
4.「アルゴリズムとデータ構造」おすすめの解説動画
4-1.【Youtube動画】Neetcode
4-2.【Youtube動画】CSDojo
5.「アルゴリズムとデータ構造」おすすめの解説アプリ(おまけ)
5-1.アルゴリズム図鑑
6.おわりに
アルゴリズムとデータ構造とは?
皆さんはアルゴリズムとデータ構造というのをご存知でしょうか?まず、「アルゴリズム」とは、算法とも呼ばれ、コンピューターが問題を解決する際に沿う手順のことで、「データ構造」とは、データを扱いやすくするために一定の形式に当てはめて格納された、データの集合体のことです。
参照:「【入門編】アルゴリズムとデータ構造とは?」
アルゴリズムとは、欲しい結果を得るためにどのような方法でそれを実行するのか、ということを段階的に決めた手順のことです。例えば、任意の数の配列を降順で並び変えるにはどのようなやり方があるか、ということです。そしてデータ構造とは、このアルゴリズムを考える上でどのようなデータの持ち方をするか、というデータ構造のパターンのことです。Javaなどには既に組み込みでこうしたデータ構造が使えるようになっていますが、それはSetやList、Mapといったものです。
参照:Data Structures - Algorithms Basics
日本ではこのアルゴリズムとデータ構造の実装力を競う競技「競技プログラミング」が結構盛んで、Atcoderコンテストなどが有名です。競プロについては、以前弊社エンジニアのプリヤンカさんが書いている記事もあるので、こちらもご覧ください。
英語版:「Let me introduce competitive programming」
日本語版:「競技プログラミングについてお話しします」
最初に言っておくと、私はめちゃくちゃこの競プロが苦手です(爆)…プログラミングを始めたばかりの頃、エンジニア向け学習プラットフォームのpaizaやcodewarsで当時色んな問題をひたすら試していましたが、殆ど解けなくて、当時勉強の面倒を見てもらっていた外部のメンターさんに泣きついて毎度答えを教えてもらい、解説していただいていました。その時の苦手意識が未だに染み付いていて、競技プログラミングは辛い、という心象しかないぐらいです…
ただ競技プログラミングというか、このデータ構造とアルゴリズムはエンジニアである以上避けて通れない問題でもあるので、苦々しいながらもちょっとずつ向き合っています。
ぶっちゃけた話、全部のアルゴリズムとデータ構造について勉強し切った訳ではないのですが、これまで苦手だったこの競プロ力を上げるために自分がしてきたことや、気付いたことについてシェアしてみたいと思います。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
続きはこちらのテックブログからご覧ください。
【https://gmor-sys.com/2023/06/16/algorithms-and-data-structure/】