見出し画像

社会人から始めたAtCoder、水色になりました

2019/8にAtCoderと出会い約半年、コンテスト参加回数26回目にして(ようやく?)水色になりました。
社会人+家庭持ちということもありAtCoderに使える時間の制約が強かったのですが、毎週のABCを地道にこなすことで着実に実力を向上させることができた感覚があります。
以下、この半年を振り返ります。

レート推移

競技プログラミング自体初めての挑戦でしたが、初参加からABCのC問題を解けるくらいの実装スキルはあったので緑までは問題なく進みました。
C++も勉強しながらだったので、最初の10コンテストくらいはC++の標準ライブラリのデータ構造・関数を知らないために解けない問題もあり、もどかしい思いをしました。
日常の中で過去問をたくさん解く時間はないので、毎週のコンテストをこなし、解説動画を見て少しずつスキルを上げていったような感じです。

1.レート推移

レートを上げるためにやったこと

11月くらいに蟻本を買ってみて本格的にアルゴリズムの勉強を始めたのですが、同時期にKaggleにも手を出し始めたためあまり勉強に時間を取れず、一日30分程度蟻本を読み進めるのと、毎週末のコンテスト参加+解説動画で復習を繰り返しました。
AtCoderを始める以前の過去問も少しは取り組んでみましたが、あまり多くの時間はかけられませんでした。
それよりも、一度コンテストで挑戦した問題の解説放送を聞いて、何ができていなかったのかしっかりと振り返ることが重要だと感じました。
個々の問題に対する振り返りというより、自分は何を理解できていなかったのか、似たような問題に出会ったときに解けるようにしておくにはどのような意識を持っておけばよいか、など、一段階抽象化してじっくり考えました。
あとは、ある程度思考をパターン化しておくことが大事だと思いました。
(制約的にO(NlogN)のアルゴリズムでなければならない場合や、最小値を最大化と言われたらまず二部探索を検討してみる。O(N)でも間に合わない制約のときにはまずDPを検討してみる。など)
最初に考えたパターンが必ずしもいきなりマッチするとは限りませんが、そこから発想が広がっていくことは多々あるので、できるだけ多くのパターンを学習してコンテスト中に引き出せるようにするために、解説放送による学習が重要になります。
snukeさんの公式解説放送では、「こういう問題のときはよくこういうパターンが使える」などの話をしてくれるため、解けた問題でも時間がかかった場合などには解説放送をじっくり見てみることをお勧めします。
私の場合、過去問を解くのと本番のコンテストでは発揮できる集中力が全然違うため、本番のコンテストで解けなかった問題を時間をかけて振り返ったり、しばらくしてから解きなおしたりするほうが格段に学習効率が良かったです。
AtCoderProblemsはこんなかんじです。

画像2

AtCoderを始める前と比べて進歩したところ

■ 競技プログラミングスキル
C++の標準ライブラリにあるデータ構造・関数を状況に応じて使えるようになった。
(コンテストを通じて覚えたものからQiitaの記事に追記していくことで、同じミスを二回はしないようにしました。)
二部探索を実装できるようになった。
簡単なDPを実装できるようになった。
(変数が3以上あるようなDPは未だにできたりできなかったり。。)
・DFS、BFS、ダイクストラなど基本的なグラフアルゴリズムを使えるようになった。
(蟻本を読んでライブラリをgithubに上げていきました。)
■ 競技プログラミング外のスキル
読みやすいプログラムを書く気持ちが強くなった。
(競プロのプログラムとは相反しているように感じるかもしれませんが、競プロで早く正確なコードを書くためには読みやすく理解しやすいコードにする必要があるため、自然とそのような意識が強くなりました)
学生との話のネタにAtCoderを使えるようになった。
私は業務の一部で採用にも携わっているのですが、優秀な学生さんであるほどAtCoderを知っている/やっている率が高く、話のネタになりますし、ある程度ちゃんとAtCoderに取り組んでいることは会社(社員)のアピールにもなります。

次に目指すところ

同時期に始めたKaggleも頑張りたいところですが、KaggleはAtCoderと比べて1コンテスト当たりの負荷が大きいのが大変なところです。
AtCoderは引き続き毎週のコンテストに参加し、2020年中に青になることを目指します。
あとは、AtCoderで人とのつながりも作っていけたらいいなと思っています。
(Twitter : @gnbrganchan

この記事が気に入ったらサポートをしてみませんか?