【AtCoder】初心者プログラマが2ヶ月間ほぼ毎週コンテストに参加した記録

2ヶ月ほど前(5/14)に、いつも通りなんとなくで参加しつつも頑張ったのに、パフォーマンス189を出しました。
「このままじゃ一生茶色になれないのでは」と悲しみを抱き、ちょっとだけ真剣に取り組むようになりました。

それから今まで(7/2)のコンテスト成績を見つつ、また過去の競プロの取り組みも整理しながら、どんな部分で伸びたのか記録していきたいと思います。

※**灰コーダー**の記録なので、普通にC問題以上解ける人には参考にならないと思います。

## 私の競プロ略歴

### 競プロに参加した経緯と今まで
簡略すると「去年ほんのちょっとやってやらなくなって最近またやり始めた」

* 2021年(去年)6~7月頃、C言語基礎の授業で初めてプログラミングに触った
* 「せっかく学んだしもっとやりたい」といろいろ調べて競プロに出会った
* [APG4b](https://atcoder.jp/contests/apg4b "C++入門 AtCoder Programming Guide for beginners (APG4b) - AtCoder")をやりながら、2021年8月から競プロに参加
* [APG4b](https://atcoder.jp/contests/apg4b "C++入門 AtCoder Programming Guide for beginners (APG4b) - AtCoder")を一周したあたりで「全然レート伸びないなー」と参加しなくなる
* その後も単位認定試験やら生活の変化やらで忘れ去っており、2022年(今年)4月からまたやり始め今に至る

### コンテスト成績
#### Rating
* 5/14時点:**灰160**
* 7/2時点:**灰329(+169)**

#### 5/14~7/2の成績表
参加したものはすべてAtCoder Beginner Contest
参加回数:7回

|日付(昇順)|パフォーマンス|差分|
|-|-|-|
|2022-05-14(土) 22:40|189|+3|
|2022-05-21(土) 22:40|427|+23|
|2022-05-28(土) 22:40|769|+55|
|2022-06-11(土) 22:40|760|+55|
|2022-06-18(土) 22:40|434|+14|
|2022-06-25(土) 22:40|222|-12|
|2022-07-02(土) 22:40|597|+31|

やらかした5/14、6/25を除いて、パフォーマンスは400超えで安定、レートもぼちぼち増えています。
このまま続ければ茶は行けそう。

高いパフォーマンスが出ているときは、D問題が解けた・C問題が速く解けたのが理由です。

#### 推移

ながーいブランクが見て取れますね。
この7回の伸びは、以前と比較してかなりの急成長。

![AtCoderRating20220703.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1919799/6a610695-c3d3-f79f-4b90-512a3000eb44.png)

## この2ヶ月でやったこと
* できるだけ毎週競プロに参加する

これだけ。
別の勉強で忙しく、競プロの勉強は全くしていませんでしたが、コンテストに参加し続けて結果的にレートが伸びました。

21時~22時頃に家の人が帰ってくるのもあって、時間いっぱい集中することは少なかったです。(C問題終わったらやめるなど)
それでも、難化していなければ30分~1時間くらいでC問題まで終わるようになりました。

ただ、以下の「この2ヶ月で成長したところ」がなければ、平均200ほどのレートで浮浪していたと思います。

## この2ヶ月で成長したところ
「参加し続けただけで伸びた」と書きましたが、以前にも「参加し続けただけ」の時期はあったものの、伸びは薄かったです。
この2ヶ月で成長したのは、その頃に足りていなかったものだと思います。

### とにかく速く解くことを意識した
A問題は2分くらい、B問題は10分くらい、C問題は30分くらい、という時間感覚を持つようになりました。
以前はのんびりだらだらA問題5分・B問題30分のような調子で、パフォーマンスを落とし続けていました。

(解く時間がどれくらい点数に影響するかは、まだ調べ不足です。ただ、コンテストにもよりますが、B問題を速攻で解いたときとB問題に時間がかかったときで、**パフォーマンス200くらい**差が出ると思います)

### 一見で解けなくても粘り強く考えた
以前競プロをしていたときは、文章が長かったり、解く手順がややこしかったりすると、私の力で解ける問題なのに投げ出すことがありました。
ちゃんと取り組んでみてわかったことですが、読解力のほうが必要になる問題もありますし、if文for文でごっちゃになった100行近くのコードでACすることもあります。

こういう問題に対して、頑張って頭で噛み砕いたり、ときにはノートで図を書いたり、とにかく食らいつくことで、C問題以上のACが増えました。
実際C・D問題までは、有名なアルゴリズムを知らずに解けるものも多く、最低限のコンテナや関数からコードを書いて、**どうにかACできちゃいます**。(※コンテスト回によります)

以前は**3回に1回、C問題が解ければ良い方**でしたが、最近は**8~9割**解けています。
目に見えてC問題・D問題のACが増えたので、一番パフォーマンスに直結した戦略だと思います。
ついでに、この粘り強さが身についてから、競プロに限らず「問題文長いうげぇ」「コード長いうげぇ」に戦えるようになりました。

### 解ける兆しがあるなら他の問題に逃げない
一個前の「粘り強く考える」の延長話です。

C問題で解ける兆しが見えても、実装が面倒でD問題に逃げることがありました。
その結果、D問題に20分ほどかけた上で撃沈し、C問題がコンテスト**終了1分後**に解けたという…

これがものすごく悔しくて、次の問題に浮気するのは実装方法すら思いつかないときに限定することにしました。
その結果、次のコンテストでは**終了3分前**に、C問題滑り込みACが出せました。

確かに、見切りをつけて成功する場面もありましたが、思い返せばそれは「これは無理無理解けねぇ」というときの話でした。
解ける兆しがあるなら無駄にしちゃいけないな、と思いました。

※これは**C問題とD問題の話**です。灰コーダーにとって、B問題は時間をかけると点数が目減りしますが、C問題は時間をかけても超ありがたい点数源になってくれます。たまにBのほうが難しいときもあるので、**B→Cの浮気は戦略的**かも

## おわりに
読んでくださった方、本当にありがとうございます。

動的計画法や深さ優先探索など、アルゴリズムはちんぷんかんぷんなので、これから学んでいきたいと思っています。
でも、そういった知識・技術がなくても、**取り組み方と気合次第で茶色に届くパフォーマンスは出せる**ことを、この2ヶ月で知りました。
灰で伸び悩んでいるなら、とにかく参加し続けて自分なりに問題を解き切り、蓄積を増やしていくことが重要だと思います。

在学中に水色行けたら良いな…。
これから何事もなければ茶色まで行くと信じてますので、そのときまた記事を書きたいと思います。