たのしい競プロブログ

主に競技プログラミング(AtCoder)の話題など

AtCoder 緑色になるまでにやったこと

先日(2019/03/03)のコンテスト(AtCoder Beginner Contest 120)で、レーテイングが809に到達し、緑コーダーになることができたので、今までにやってきたことを振り返ってみたいと思います。

目次

1.AtCoderデビュー~緑到達までの流れ

2.緑に到達するためにやるべきことは何か?

3.今後の課題

※実は緑色になるのは今回が2回目なのですが、1回目に緑色になったときは運の要素が強かったため、このような記事を書くのを見送っていました。

 

1.AtCoderデビュー~緑到達までの流れ

1.1 2018年3月(デビュー)~2018年8月ごろ

 僕は2018年3月にAtCoderを始めました。まず初めは、practice contestで入出力の方法学び、次にdrken氏の「AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~」を読み、記事に書かれている問題を解いていきました(現在では、「AtCoder Beginners Selection」という名前で常設コンテストとして整備されています)。

 その後、4月からは大学の授業が始まったため、「とりあえずコンテストに出るだけ」という状態が続き、コンテスト以外で問題を解くことがほとんど無くなってしまいました。

f:id:Ichijyo:20190304025634j:plain

AtCoder Scores の精進グラフ機能により生成した画像。図より、コンテストに出るだけの期間が多いことがわかる。

 しかし、コンテストに出て得られた経験より、以下のことがわかりました。

 ・自分はABCのA, B問題はほぼ確実に解くことができる。

 ・C問題は解けたり解けなかったりする。

 ・C問題まで解ければ緑相当のパフォ―マンスを得られる可能性が高い。

これらの経験より、「C問題を確実に解けるようになること」を課題として設定しました。

 

1.2 2018年8月ごろ~2019年2月ごろ

 夏休み中は、上記の課題をクリアするために、ABCのC問題に取り組みました。C問題を解いていくうえで、簡単な問題から解いて行った方が効率がいいだろう、という思いから、過去に出題されたC問題のコンテスト中の正解率をExcelにまとめ、正解率の高い問題から解いていきました(現在、このデータは私のHP上で公開しています→リンク)。上の精進グラフで、8月ごろの傾きが急になっている部分がこれに相当します。

 10月になり。授業がはじまると、再び「コンテストに出るだけ」状態に戻りました...

 

1.3 2019年2月ごろ

 1.2の「コンテストに出るだけ」期間では、次の新たな発見がありました。

 ・C問題が難しい場合は、A,B問題を早く解くことが高いパフォーマンスを取るために重要となり、A, Bの2完でも緑パフォーマンスをとることができる。

 そこで、冬休みに入ってから、C問題は一旦置いておき、ABCのA, B問題を早く解く練習をしました。具体的には、同じコンテストのA, B問題をストップウォッチで時間を計りながら、10分以内でACを目標として解いていきました。

 この練習により、A, B問題が安定して解けるようになりました。この成果として、C, D問題がかなり難しかったAtCoder Beginner Contest 119においてもA, Bの2完で緑パフォ―マンスを得ることができました。

 また、緑に昇格したAtCoder Beginner Contest 120においても、A, B問題が速く通せた分、C問題に余裕をもって取り組むことができたことが緑昇格に繋がったと思います。

 

2.緑に到達するためにやるべきことは何か?

 以上の自分の経験から、緑に到達するためには以下の2点が重要だと考えます。

  1.A, Bを早く確実に解けるように練習すること。

  2.(難しい場合を除いて)C問題を通せるようになること。

 1.については、練習をすればするほど、問題のパターンが見えてきて、自分の中で定石(例えば、文字列の問題が出たらこう処理する、とか…)を固めていくことができます。そのため、「A, B問題は解けて当たり前だからやらない」という人でもやってみる価値はあると思います。

 2.については、上でも書いたように、過去問のうち、正解率の高い問題から解いていき、自分が解ける問題の幅を広げていくのが良いと思います。

 

3.今後の課題

 今後、水色を目指していくうえでの課題は、D問題を解けるようになることだと考えています。D問題では、アルゴリズムの知識を要求される問題が多いように感じられるため、過去問を通じて、アルゴリズムの知識を蓄えつつ、解ける問題の幅を広げていきたいと考えています。また、2.で述べた2点についてもまだ道半ばですので継続してやっていきたいと考えています。