はじめに:プログラミング歴1年、AtCoder5回で入茶した僕について
はじめまして、学生エンジニアの@huyunokiです。
僕は関西大学の情報系に在籍していますが、プログラミングを本格的に始めたのは1年ほど前です。
現在の経験は以下の通りです。
- 基礎経験: 授業でのプログラミング経験が少しある程度。
- 本格学習: 1年ほど前にプログラミングスクールでPHP/Laravelを習得。
- 実務経験: スクール卒業後にメンターとして活躍、またSaaS企業でJavaを扱うインターン生として活躍。
こんな僕が興味本位でAtCoderに挑戦し内定式や旅行などでなかなか参加できない中で、わずか5回のコンテスト参加で入茶を達成しました。
「C++が最強」と言われる競技プログラミングの世界で、なぜJava使いの初心者が短期間で結果を出せたのか?
それは、「量より質」、「無駄な実装を避けるための徹底したアルゴリズム学習」に絞ったからです。この記事は最速で入茶したい学生や初心者に向けた僕の学習戦略の記録です。
結論:最速入茶を支えた「3つの習慣」
僕の短期間での成長を支えたのは、以下のシンプルな3つの習慣だけです。
- 得意な言語を選定し、基礎構文を固める
- 解けたら終わりではない、「アルゴリズムの最適化」を徹底する
- 「最適な解法」を本番で使うための訓練を積む
Part 1: 基礎固めと「楽しい」の重視
1. 得意・興味のある言語を選定する
- 競技プログラミングでは、一般的にC++が最速と言われますが、最初は「楽しむ気持ち」が一番大事です。
- 僕は普段インターンでJavaを扱っているため、そのままJavaを選択しました。
- 【教訓】 C++の速さよりも、「使い慣れた言語」で問題を解く楽しさが、継続のモチベーションになりました。
2. まずは基礎構文を固める
土台がないと、アルゴリズムの勉強も効率が悪くなります。
- Javaの場合、僕はOracle社が出しているJava Bronzeを勉強し取得しました。
- 配列、ループ、基本的な入出力といった基礎を固めるだけで、AtCoderのA問題やB問題はすぐに解けるようになりました。
- 基礎固めは以下参考書一冊だけで十分でした。
Part 2: 「アルゴリズム脳」の最速構築戦略(重要)
ここが僕が5回で入茶できた最も重要なポイントです。C問題やD問題以降では、何も考えずに実装するとほぼ確実に「時間超過(TLE)」になってしまいます。
1. 練習問題は「解けたらOK」にしない
- 練習問題を解く際は、基本的にすべて解きます。
- ただし、解けた後が本番です。「クリアしたからいいや」ではなく、必ず復習し直します。
2. 最適なアルゴリズムを「探し、検証」する
これが「アルゴリズム脳」を鍛える最大の習慣です。
僕が問題を解くときに回していた「実装と検証のサイクル」はこちらです。
- 実装後、計測: 最初に何も考えずに実装したコードの実行時間を計測する。
- 最適なアルゴリズムの検索: その問題に対して「より最適なアルゴリズム」がないかWebや書籍で調べる。
- 最適化と再実装: 最適なアルゴリズム(例:全探索から動的計画法、バブルソートからクイックソートなど)を学び直し再実装する。
- 体感: 再実装後、実行時間が目に見えて早くなることを実感する。
このサイクルを繰り返すことで、オーダー数($O(N)$)の違いが頭ではなく体で理解できるようになり、時間超過(TLE)の対策が自然に身につきます。
3. 本番での「アルゴリズムの目利き」を訓練する
最適化の検証で身につけた知識を、本番で使えるように訓練します。
- 新しい問題を見たとき、最初に手を動かす前に以下のことを考えます。
- 必要なオーダーの逆算: 「この制約なら$O(N^2)$ではダメだ」「$O(N \log N)$に落とす必要がある」
- 解法の選択: 必要なオーダーを満たす解法をいくつか候補として考え、最もシンプルで確実なものを選んでから実装に取り掛かる。
まとめ:プログラミングの質を上げよう
この「アルゴリズムの最適化を徹底する習慣」を続けるだけで、僕は短期間で入茶を果たしました。
競技プログラミングへの挑戦は、エンジニアとして最も大切な「自走力」の一部である、「問題の本質を見抜き、最適な解決策を選ぶ力」を最速で鍛えるための最高のスパルタ教育です。
プログラミング経験の長さは関係ありません。ぜひ、この学習戦略を参考に、AtCoderという最高の環境でエンジニア人生を楽しんでください!
最後まで読んでいただき、本当にありがとうございました!
