プログラミング学習計画:1年でLeetCode Medium攻略¶
📁 docs/it-learning/artifact/programming_study_plan.md
Issue: #224 更新: 2026-03-22 目標:1年後にLeetCode Mediumを安定して解けるレベル 条件:1日30分 / Python or Java / C未経験
言語選定:Python を強く推奨¶
| 観点 | Python | Java | C |
|---|---|---|---|
| 学習コスト | ★★★(低い) | ★★(中程度) | ★(高い) |
| LeetCode相性 | ◎(解法サンプルが最多) | ○ | △ |
| 記述量 | 少ない | ボイラープレートが多い | ポインタ・メモリ管理が必要 |
| アルゴリズムへの集中 | しやすい | やや難しい | 難しい |
| 将来性 | AI/ML/データ分析にも使える | Web/Androidに強い | 組み込み/OS開発向け |
結論:Pythonで始めるのがベスト。
- 構文がシンプルで「言語の学習」でなく「アルゴリズムの学習」に集中できる
- LeetCodeの解説・解答はPythonで書かれているものが最も多い
list,dict,set等の組み込み型が豊富でアルゴリズム実装に向いている- CやJavaは「アルゴリズムが安定してから2言語目として学ぶ」で十分
1年間ロードマップ(1日30分 × 5日/週を想定)¶
Phase 1:Python基礎を固める(1〜2ヶ月)¶
目標: コードを「読んで書ける」状態にする
| 週 | テーマ | やること |
|---|---|---|
| 1〜2週 | 変数・型・演算 | 整数・文字列・ブール型。paizaのDランク問題を解く |
| 3〜4週 | 条件分岐・ループ | if/for/while。paizaのCランク問題を解く |
| 5〜6週 | 関数・リスト | def, list操作(append/pop/sort)。paizaのCランク |
| 7〜8週 | 辞書・集合・文字列 | dict, set, str操作。LeetCodeのEasyを試し始める |
Paizaで挫折しないコツ: - Dランク→Cランクと段階を踏む(Bランクは後回し) - 解けなかったら30分で諦めて解答を読む。写経して理解する - 「解けること」より「なぜそう書くか理解すること」が優先
Phase 2:データ構造の基礎(3〜4ヶ月)¶
目標: LeetCode Easyを自力で解けるようにする
| 月 | テーマ | 学ぶ内容 |
|---|---|---|
| 3ヶ月目 | 配列・ハッシュマップ | Two Sum系問題。O(n)とO(n²)の違いを体感する |
| 3ヶ月目 | スタック・キュー | collections.deque。括弧の対応チェック等 |
| 4ヶ月目 | 文字列操作 | スライシング、逆順、回文チェック |
| 4ヶ月目 | 二分探索入門 | ソート済み配列への探索。bisectモジュール |
LeetCodeの進め方: - タグで「Array」「HashMap」等を絞って Easy だけ解く - 解けなくても20分で解答を見てOK。重要なのは「パターンを覚えること」 - 解いた問題を手元のノートやMDにメモする(後で復習用)
Phase 3:アルゴリズム基礎(5〜7ヶ月)¶
目標: 定番アルゴリズムのパターンを身につける
| 月 | テーマ | 学ぶ内容 |
|---|---|---|
| 5ヶ月目 | 再帰・分割統治 | フィボナッチ→メモ化。再帰の「木」をイメージできるようになる |
| 5〜6ヶ月目 | DFS・BFS | グラフ・木の探索。島の数(Number of Islands)等 |
| 6ヶ月目 | スライディングウィンドウ | 部分配列の最大値等。Medium頻出パターン |
| 7ヶ月目 | 二ポインタ法 | ソート済み配列の問題。メモリ効率O(1)の解法 |
Phase 4:LeetCode Medium 本番(8〜12ヶ月)¶
目標: Mediumを自力で解けるようにする
| 月 | テーマ | 学ぶ内容 |
|---|---|---|
| 8〜9ヶ月目 | 動的計画法(DP)入門 | コイン問題・ナップサック。DPの「状態定義」に慣れる |
| 9〜10ヶ月目 | グラフ・Union-Find | 連結成分の数え方。Medium頻出 |
| 10〜11ヶ月目 | ヒープ・優先度付きキュー | heapq。TopK問題 |
| 11〜12ヶ月目 | 総復習・苦手強化 | 解いた問題を再度解く。間違えたパターンを重点的に |
週次スケジュール例(1日30分)¶
| 曜日 | 内容 |
|---|---|
| 月 | 新しい概念のインプット(記事・解説動画・本) |
| 火 | 新しい問題を1問解く |
| 水 | 昨日解いた問題の復習・別解を調べる |
| 木 | 新しい問題を1問解く |
| 金 | 週の振り返り。解けなかった問題を再チャレンジ |
| 土日 | 休み or 気が向いたら1問 |
ポイント:「毎日解く」より「週5日・インプットとアウトプットを交互に」の方が続く。
推奨リソース¶
学習教材¶
| リソース | 種類 | フェーズ | 備考 |
|---|---|---|---|
| Paiza | 問題集 | Phase 1 | D→Cランクのみ。Bは後回し |
| Python公式チュートリアル | ドキュメント | Phase 1 | 無料・日本語 |
| CS50P(Harvard) | 動画講座 | Phase 1〜2 | 英語だが字幕あり。無料 |
| NeetCode | 動画解説+問題集 | Phase 2〜4 | LeetCode解説の最定番。英語 |
| アルゴリズム図鑑 | 書籍 | Phase 2〜3 | 図解でイメージをつかむのに最適 |
LeetCode 問題リスト¶
| リスト | 問題数 | おすすめ時期 |
|---|---|---|
| NeetCode 150 | 150問 | Phase 2〜4の主軸 |
| LeetCode「Top Interview 150」 | 150問 | Phase 3〜4の補強 |
| LeetCode Daily(毎日1問公開) | 毎日 | Phase 4(習慣化) |
よくある挫折パターンと対策¶
| 挫折パターン | 原因 | 対策 |
|---|---|---|
| 問題が全然解けない | 難易度が高すぎる | 必ずEasyから。Dランクから始める |
| 解けても次に活かせない | 解きっぱなし | 解いた問題をMDにメモ(パターン名+ポイント) |
| 途中でやる気が消える | 成長を感じにくい | 月次で「解いた問題数」を記録する |
| 毎日続けられない | ハードルが高い | 「1日1問」ではなく「週5日」にする。できない日を織り込む |
マイルストーン¶
| 時期 | チェックポイント |
|---|---|
| 2ヶ月後 | Paiza CランクをTLE(時間超過)なしで安定して解ける |
| 4ヶ月後 | LeetCode EasyのArray/HashMap系を自力で解ける(正答率60%以上) |
| 7ヶ月後 | LeetCode EasyをDFS/BFS含めて安定して解ける |
| 12ヶ月後 | LeetCode MediumのArray/DP/Graph系を自力で解ける(正答率50%以上) |