入茶
2020年の4月にatcoderを始めてから4ヶ月、ついに灰色コーダーを卒業し茶色コーダーになりました!30も半ばを過ぎてからの競技プログラミング挑戦ですが、ひとまず目標としていた茶色まで到達できて素直に嬉しいです。この記事では茶色になるまでにやったことを書きます。
やったこと
drkenさんの入門記事で勉強
drkenさんという競技プログラミングの解説記事で有名な人がいます。まずはこの人の書いた下記の入門記事を読み、一通りの典型問題を解いて行きました。
https://qiita.com/drken/items/fd4e5e3630d0f5859067
私の場合、コンテストに参戦する前にこの問題を一通り解いてどんな感じかまず確認しました。なるべく自力で解こうとはしましたが、考えてもわからないものは解説を読んで解いていました。いろいろな学習スタイルがあると思いますが、私の場合はそもそもプログラミングすること自体のスキルがない状態から始めているわけで、アルゴリズムがわからないのか、言語を扱えていないのか、数学的な知識が足りないのか、皆目検討がつかないのです。この状況でうんうん唸っていても下手の長考休むに似たり、なのであまり考え過ぎずに解説見て進めています。
atcoder problemsのtrainingをやってく
そうこうしているうちに、twitterで「Atcoder problems」という素晴らしいサイトを知りました。このサイトではAtcoderの過去問が難易度別に整理されているのですが、その中でも「training」というところでは、難易度easy~medium~hardまでの3段階で過去問が100問ずつ、合計300問精選されています。とにかくこのうちのeasyに狙いを絞って片っ端からやって行きました。
今の進捗はこんな感じ。ほぼeasyは終わりそうです。
どのアルゴリズムを学習するかとか、勉強する内容について考えなくても端から解いていけばよくて、頭を使わないので楽です。
とにかくコンテストには参加する
コンテストに参加せねばレーティングは獲得できません。体調不良や予定が合わない時以外はなるべくコンテストに参加して、実戦の中で鍛えることが大事だと思います。制限時間のプレッシャーがかかる中で、どれだけのパフォーマンスを発揮できるか、メンタルを鍛えなければレーティングは獲得できません。また本番では一つ一つの問題に対して真剣に向き合って解こうとします。結果、解けなくても解説をみたときに、真剣に取り組んだ問題については後々の定着も違う気がします。実戦経験を積むことは最大の訓練になるでしょう。
週一回のばちゃこん
私の場合、環境に恵まれているのは、週1回職場で競技プログラミングの勉強会としての「バチャコン」が開催されていること。バーチャルコンテストとは草コンテストのことで、Atcoderの過去問から適当に問題を選んできてそれを制限時間に何問解けるか、有志で競い合うというものです。
職場には青色コーダーがいて、バチャコン終了後には各問題についての解説をしてくれます。これは非常に勉強になります。
バーチャルコンテストでは本番と同じように制限時間があり、同じようなプレッシャーの中、必死に考えます。ただ過去問をだらだらやっているのとはまた違う学びが得られます。リアルに競技プログラミングをやっている仲間がいない人でもネット上で誰でも参加できるバチャコンも多いので参加してみると良いと思います。
競プロ記事作成
自分がどのように考えて問題を解いたのか、解き終わった後に振り返り、また人に伝えるために言語化することで理解が深まるのではないか、と考え解いた問題についての解説記事を書いたりしました。
そのほか、素因数分解や、エラトステネスの櫛、等の典型アルゴリズムについて練習がてら実装したものを記事にしたりしました。
また、問題が解けない理由と、各理由に対しての対策案なんかを考えてたりしました。
とりあえず、こんな感じで4ヶ月をかけることでなんとか茶色になれました。次は当然緑を目指して行きます。
そのためには、今まで参加したコンテストで解けなかった問題達をきっちり解けるように見直して行き、足りないアルゴリズムの知識をしっかり身に付けていくことがまず必要だと思っています。目標は後8ヶ月以内に入緑、競技プログラミング開始から1年での緑を目指して頑張るぞ。