こんにちは。
AtCoderで悲願の水色になりました!
悲願の入水キターーーーーーーー!!!!
— ゆうすけ@Railsエンジニア (@ysk_pro) 2020年5月30日
めっちゃ嬉しい!!!
ysk1180さんのNOMURA プログラミングコンテスト 2020での成績:741位
パフォーマンス:1780相当
レーティング:1117→1206 (+89) :)
Highestを更新し、4 級になりました!#AtCoder https://t.co/6Q9qSdzYxl pic.twitter.com/B4eBHMWi31
2019/9 に AtCoder を始めて、9ヶ月かかりました。始めた頃は、水色は遥か先のイメージだったのでとても嬉しいです!
緑色になるまでにやったこと、AtCoder とはそもそも何なのかや、続けるモチベーションなどについてはこちらの記事に書いているので、ご興味ある方は合わせてご覧ください。
この記事では、緑色になってから水色になるまでにやってきたことやコンテスト中に意識していることを書こうと思います。
やったこと
AtCoderのコンテストに出続けること
モチベが下がったりしても、とにかく毎週末コンテストに出続けました。
最近はたまに青色パフォも出るようになってきました。
維持・微減を繰り返しながら、たまにガッと上がっている感じですね。
解けた問題も解説動画を見ること
コンテスト後に配信される解説動画は本当に神です。
AtCoder社の snuke さんの説明は、とても分かりやすくて学ぶことが多いです。
解けた問題でも、自分とは違う解き方やアプローチを学ぶことがあるので、極力見るようにしています。
コンテスト中に解けなかった問題を徹底的に復習すること
解けない問題を解けるようにすることが一番レベルアップに繋がると信じているので、コンテスト中に解こうとして解けなかった問題は徹底的に復習していました。
解こうとして解けなかった問題のみで、チャレンジすら出来なかった問題まではやっていません。1つのコンテストが終わったら、解けなかった1問を翌日に数時間かけて復習している感じです。
具体的には、前述の解説動画を何度も見たり、他の方の解説ブログを読んだり(「AtCoder ABC168 E」などと検索すると分かりやすい記事がたくさん出てきます)、同じ言語で通している方のコードを読むなどして理解をして、その後に自分で何も見ずに解いて、つまずいたらまた解説に戻って、というのを繰り返しています。
かなり時間がかかることもあり苦しいですが、その分これがレートの向上に一番効果があったと思います。
仲間とバーチャルコンテストをやったり、お互いに解説したりすること
幸運にも勤めている会社で同じ時期に AtCoder を始めた仲間が何人かいるので、その方々と休みの日にバーチャルコンテストをやったり、難しい問題をお互いに解説し合ったりしていました。
知り合いとワイワイやるのは楽しいですよね。
自分が行なった解説をブログにまとめてみたりもしました。
ABC168 E「∙ (Bullet)」の解説 【AtCoder Beginner Contest】 - 銀行員からのRailsエンジニア
コンテスト中に意識していること
これまで29回コンテストに出場して多くの失敗をしてきました。そんな失敗などから学んで意識していることをまとめてみます。
とりあえず全探索を考えてみる
全探索が間に合うのであれば、全探索をするのが一番確実だと思っています。
「無理だろうな」と思ってもまずは全探索の計算量を考えて、間に合わない場合はそこから「どうやって計算量を下げようか」と考えるようにしています。
意外と全探索で間に合ってしまう問題も多く、間に合わない場合も考察の取っ掛かりになるので「とりあえず全探索を考える」というのは悪くないと思います。
実装に入ることを焦らずに、実験を繰り返して考察に時間をかけてから実装する
考察が中途半端なまま、焦って実装に入って泥沼にハマるというのを何度か経験して学びました。
考察に時間をかけて「これだ」という解法を見つけてから実装した方がスムーズに解き終わることが多いです。
また、糸口が見つからない時はノートとペンを使ってとにかく実験(色々なケースで試すこと)をしています。頭の中で考えるよりも、手を動かして実験をしていった方が糸口が見えてくることが多かったです。
固定してみる・逆から考えてみる
少しテクニック的な話になってしまいますが、1つの変数を固定したり、逆から考えてみるとシンプルになる場合があるので、詰まったらよく試しています。
やった方がいいと分かりつつやれていないこと
この記事のメインの部分はここまでですが、反省を込めてやれていないことも書いておこうと思います。
コンテスト以外に問題を解くこと
緑色になってから、若干モチベが下がったのと趣味の個人開発により時間を割きたくなったことから、それまで続けていた過去問を解くのをやめてしまいました。
アルゴリズムを学ぶこと
知り合いの青色 Coder の方に coursera の無料のアルゴリズムの講座 をおすすめいただき、やろうやろうと思いながらなかなか手がつけられていません。
定番の 蟻本 も少しだけ読みましたが、積ん読になってしまっています。
典型のアルゴリズムでも使いこなせていないものが多いので(DPを本番で一度も通したことがないです..)、そろそろ向き合わないといけないなーと思っています。
Ruby を卒業すること
実行速度、解説の豊富さ、ライブラリの充実などのメリットから、c++ を使った方がいいと分かりつつ、なかなか Ruby を卒業できていません。
オールRubyでした(笑)
先日、Ruby では通せない問題(AGC44 B Joker)に初めてコンテスト本番でぶち当たって衝撃を受けたので、そろそろ c++ 覚えないとなあと思っています。
おわりに
できていないことも多いですが、毎週コツコツ続けることで徐々に結果が出てきて嬉しいです。
これからも無理せず、毎週のコンテストを楽しんでいこうと思います。
目指せ青色!!