約5年かけて やっとAtCoder水色になった話
AtCoderの色変記事は、ちまたにはあふれていますが、だいたい「こんな短期間でこんな色まで上がったよ」というタイプの記事(俺すげーぜ系)が多いように思います。
私もAtCoderで競プロを始めた当初は、「水色くらいなら簡単に行けそう」と思っていました。しかし、実際は、山あり、谷あり(谷の底で一時的に気絶してしまうこともありました、、、)でした。
そんな中で、決してすごくない普通の私でも「継続は力なり」を実践して、なんとか水色に滑り込むことができました。この記事が、私と同じように、緑や茶色で長期間くすぶっている人たちを応援できる内容となれば嬉しいです。
私のプログラミング歴
私自身の背景について、少しだけ簡単に
世代:昭和生まれのおじさん
大学:理系の大学を卒業
仕事:非エンジニア系の職種(仕事でプログラミングは使っていません)
競プロ使用言語:Python
プログラミング歴:独学で約5-6年、AtCoder前は、仕事の効率化のためにVBAを少しやった程度
数学をしっかり学んだのは、高校生までです。受験科目の中では、数学は好きで得点源ではあったんですが、得意というのは恥ずかしいくらいのレベルです。
競技プログラミングとは?
この辺りは、知っている人は読み飛ばして下さい。
まず、競技プログラミングとは、与えられた課題を解くことができるコード(プログラム)を設計・実装して、アルゴリズムの効率性と、コード作成のスピードを競う競技です。使用できるプログラミング言語は、AtCoderでは自由に選べますが、C++を選んでいる参加者が多いようです。
競技人口については、詳細に調べた下記の記事がありますが、20歳代の参加者が多いようです。
競技プログラミングのサイトは、いくつかありますが、日本のサイトでは、AtCoderが最も大きいです。海外のものでは、TopcoderやLeetcodeといったものがあるようですが、私自身は参加したことはありません。
AtCoderのコンテストの中で、参加者数が多いのが、AtCoder Beginner Contest(通称ABC)です。毎週土曜日に開催されることが多く、夜の21時から100分間、各回1万人くらいの参加者がパソコン前で脳汁を絞っています。
AtCoderの水色ってどれくらいなの?
AtCoderの色ランクは、上から赤、橙、黄、青、水色、緑、茶、灰となっており、水色は上から5番目(下から4番目)に位置します。知らない人から見ると、そんなに高くないじゃんと思うかもしれませんが、赤、橙レベル(暖色系コーダーと呼ばれる)には、国際情報オリンピックに出場して、メダルをもらったりするレベルの人たちが含まれており、色分布も上位の色の割合は少なくなっています。
水色コーダーのレベルについては、時期によって少しずつ変わってきていると思います。2021年から本格的に競技プログラミングを始めた自分としては、当時、水色は簡単に届きそうなレーティング帯だと考えていました。ただ、競技プログラミング人口の増加によって、水色コーダーに求められるレベルは若干上がってきたように思います。(主観をけっこう含んでいますが、、、)
AtCoderの公式サイトでは、実レーティング分布:上位8%くらいのレベルが、水色コーダーに相当すると書かれています。
現在の私のレーティングとこれまでの推移
2025/7/26に行われた AtCoder Beginner Contest 416 (ABC 416)で、ついに念願の水色コーダーとなることができました。初めてコンテストに参加したのが、2020/12/13でしたので、4年8か月かかったことになります。2021/3/27には、緑になっていたので、4年以上の期間、緑でくすぶっていたようです。
このグラフを見て「水色になったって言っても、ギリギリじゃん」と思いましたね?
分かります。その通りです。ギリギリなんです。「色変記事は色が変わったあと、コンテストを3回くらいキープしてから書いた方が良いんじゃない?」と考える人もいるでしょう。私もその意見に賛成です。でも私の実力がちょうどこの辺りのレーティング帯なので、タイミングを逃すと、すぐに緑に戻ってしまい、次に再び水色になるのはかなり先になってしまうかもしれないのです。
実際、2022年12月にレーティング1189(水色まであと11)まで来てから、その後レーティングが萎み停滞してしまい、水色になるのにそこから2年以上かかってしまいました。
無限回コンテストに参加すれば、きっと水色のレートに収束するはずなんですが、、、
これまでの精進
AtCoder ProblemsのAchievementでは、1800問以上解いていました。
以前、E869120さんの記事で引用されていた(下のリンク)のですが、水色コーダーになるために必要な問題数の目安として、800問解けば60%、1100問解けば90%の人が水色コーダーになれる(2020/01/17時点の統計)というのがありました。それと比べると、私の1800問というのは多いですね(涙)。ただ、2020年の統計なので、この頃より水色になりづらくなったのだと信じたいです。
解いた問題のdiff分類は、主に緑、水色が主体となっていました。緑、水色を中心に勉強していたようです。
私の現在の実力は、問題のレベルに対して、
問題の色レベル | diff値 | 私のコーティングレベル |
---|---|---|
灰 | 0-399 | すぐに解ける |
茶 | 400-799 | それほど苦労せずに解ける |
緑 | 800-1199 | ほぼ解けるけど、たまに時間がかかることがある |
水色下位 | 1200-1399 | 時間をかければ、なんとか自力で解ける |
水色上位 | 1400-1599 | 解説をチラ見すれば解ける |
青 | 1600-1999 | 解説は理解できるけど、自力で解くのは難しそう |
黄色以上 | 2000- | 解説を見ても理解するのに1日以上かかる |
といった感覚です。
AtCoderでレーティングを上げるのに大切なこと
私自身が水色になるために行った精進や心構えについて、個人的な考えを書いておきます。精進の仕方は十人十色ですので、一つの意見として参考にしていただきたいです。
コンテスト出場を続けることが大切
4年8か月間のレーティング推移グラフの中で、コンテスト参加を休んでいる期間が2つあります。その間もアルゴリズムの学習は細々と続けていたんですが、実力が向上したかと言われると微妙だったかもしれません。やはりコンテストに定期的に参加して、時間内に問題を解く練習をする方が、学習効果は高く、レーティングは上がると思います。
基本アルゴリズムの習得
私が習得したアルゴリズムとしては、以下のようなものがあります。
累積和
全探索(bit 全探索、順列全探索を含む)
二分探索
深さ優先探索(DFS)
幅優先探索(BFS)
動的計画法(DP)
最短経路問題(ダイクストラ法, ワーシャルフロイド法)
bit演算(and, or, xor)
ダブリング法
Union-Find
逆元の計算
セグメント木(遅延セグ木を含む)
アルゴリズムの習得には、E869120さんの競プロ典型90問や、書籍(競技プログラミングの鉄則)を利用して体系的に勉強するのが良いと思います。私は、競プロ典型90問を89/90まで解きました。
AtCoder常設の学習用コンテストのEducational DPコンテストも典型良問題が並んでおり、勉強になります。
スピードを意識することが大切
緑色でくすぶっていたときに、YouTubeで岩井星人さんの緑コーダーあるあるを見て、「あるある〜」って思いました。
その中で、「早解きができないのを言い訳にしがち」というのがあり、すごく耳が痛かったです。それ以降、できるだけ解くスピードを意識して、日々の精進についても難しい問題に取り組むより、緑diffレベル(緑の中でも上位)の問題をできるだけ早く解く練習に切り替えました。緑diffを安定して短時間で解けると、次の難しい問題にかけられる時間が増えるため、高パフォーマンスのチャンスが増えます。また、たとえ難問が解けなくても、順位が安定するのでレーティングが落ちづらくなります。2025年5月以降はその傾向が著明に出たように感じています。
数学の勉強は必要か?
水色到達のために、別途、数学の勉強が必要かと言われると、私の考えでは「No」です。数年前までは、数学を使う問題がたまに出題されていましたが、最近のAtCoderの出題傾向として、前提知識として数学力を必要とする問題の出題は減っているように感じます。
おそらく「競プロをより若い世代にやってほしい」という考えから、できるだけ敷居が高くならないように、前提知識不要の問題が増えているんだと思います。アルゴリズムについても「知らないと解けないけど、知っていれば簡単に解ける」タイプの問題は、出題が減っているように思います。
いわゆる良問が増えているということですので、すごく良い傾向だと思います。しかし、私のような旧型の生体CPUを積んでいる個体では、対応が難しいです。
青、黄色を目指す人にとって、数学が必要かについては、私のレベルでは、なんとも分かりませんので、あくまでも水色までであればという条件付きになります。
レーティングが上がらずに停滞している人たちへ
もう私の年齢になると、勉強しても全然実力が上がっている感覚がないです。過去問を解いていても、2-3年前にコンテスト時間内に解けた問題が、いまはもう解けなかったりします。完全に停滞しているってことですね。
そんな私でも、ついに入水することができました。実感はなくても、あきらめずに継続することで、少しずつ見えないものが積み重なっていたんだと思います。
ちまたには数ヶ月で水色、青色になる猛者が少数いて、そういった人たちの記事は目立つので、ときに落ち込んでしまいます。ですが、その一方で、亀のごとく歩みで、ゆっくりと目標を達成する人もいるんだということを皆さんに知っておいてほしいです。
目標到達のためには、あきらめないで継続することが大切です!
最後に
最後に私が水色コーダーになれたのは、いろいろな人の支援があったからだと感じています。
一方的に知っているだけの方ばかりですが、勝手に感謝の意を示したいと思います。
chokudaiさん:AtCoderを作ってくれてありがとう。AtCoderがなかったら、オンラインカジノとかにハマってたかもしれません。
snukeさん:いつも分かりやすい解説動画をありがとうございます。超賢いのに、たまに漢字を書けなくて困っているところに親近感がわきます。
E869120さん:作る教材が分かり易過ぎる。でも、E869120さんのせいで競プロ界全体のレベルが上がって、自分のレートが上がりづらくなったんじゃないかと思ったりします(完全に逆恨みですが、、、)
kenkooooさん:AtCoder Problemの運営ありがとうございます。このサイトのおかげで勉強がしやすくて、感謝しかありません。
岩井星人さん:緑コーダーあるあるがとても励みになりました。
毎週土曜日の21時になると、自分の世界に没入する自分を許してくれた家族。
[次の目標]
まずは水色をキープして、10年後までに青コーダーを目指します。
Discussion