AtCoderで緑Coderになるまでやったこと[色変記事]

#はじめに  
2020/08/22に開催されたABC176で緑コーダーになることができました。とても嬉しいです。
[プロフィール](https://atcoder.jp/users/yamatonao)
後続の方に少しでも役に立つよう、やったことをまとめます。  

#する前
競技プログラミングでレーティングを上昇させるためには、高校数学の知識が極めて重要であるとされています。
簡潔ですが私の数学、情報工学に関する事前知識を下記にまとめます。
- 地方国公立大の情報系学科を学士で卒業しました。
- 高校数学の最高パフォーマンスは、大阪大学の標準難易度の理系数学を1完4半(自己体感)できるぐらいです。

2017年～2019年頃は、参加自体はしているのですが、数回参加して休止を繰り返していて、精進もやってないです。
この時期は参加者も少ないので、パフォーマンスが高く出ていますが、
流石に今より低い競技プログラミング能力だと思います。 
ここらへんの時期のやったことはほんとに参加だけなので、する前とみなさせて下さい。

# やったこと
### 高校数学の勉強
　AtCoderの茶～緑問題を解くために必要な数学の要素に「(数学的)実験を行い整数の性質を見つける能力」があり、これを身につける必要があります。
　しかし、私はこの能力を身につけていませんでした。受験生時代の終わりはそれなりに点が取れましたが、それは、見れば解法がわかる問題を解いて点を稼いでいただけで、同様の能力が要求される高難易度の入試問題には手も足も出ませんでした。
　ここでいう高難易度の入試問題とは、例えば「京都大学 理系 2016年度 第2問」を指します。
　また、高校数学では合同式が発展的な内容として扱われています。私も不明ながら合同式については四則演算が成り立つことも把握してませんでした。しかし、AtCoderの茶～緑問題には頻出であり、自在に取り扱える必要があります。合同式以外でも整数の性質にはかなり通じておく必要があります。
　数学の能力を向上させるために、以下の手を打ちました。

  - 数学Aの教科書と傍用問題集を買い直しました。  
　現行(2020年ごろ)の学習指導要領における数学Aには、「場合の数と確率」と「整数の性質」が割り振られており、今のAtCoderでレーティングを上げるためには重要な教材だと思います。  
　「場合の数と確率」と「整数の性質」の領域は2回ほど通読しました。また、教科書問題は一回は解きました。傍用問題集は整数問題の例題を解く、または読みました。  
　教科書はコスパが最高の本だと思うので、コードは書けるけど問題が解けない方にはメチャクチャおすすめです。最寄りの教科書販売所や、教科書を取り扱っている専用の書店で定価で購入できます。(普通の本屋にはありません)
  - Youtubeで数学の問題の勉強  
　  特に整数問題に関する解説動画をかなり見て、数学の能力向上に取り組みました。おすすめチャンネルを貼っておきます。Youtuberの皆さんはトークも予備校の講師のように面白く、数学が苦手だったあなたも好きになること間違いなしです。  
　私も、前述の「京都大学 理系 2016年度 第2問」に関する動画は4種類や5種類を何回も見直して(ヒント付きで)解けるように仕上げました。
    - [予備校のノリで学ぶ「大学の数学・物理」](https://www.youtube.com/channel/UCqmWJJolqAgjIdLqK3zD1QQ)
    - [PASSLABO in 東大医学部発「朝10分」の受験勉強cafe](https://www.youtube.com/channel/UC7ly4Q6oT3rcdOKQcQVvMgg)
    - [Masaki Koga [数学解説]](https://www.youtube.com/channel/UCOjBG3Bu6sDxfGi15SMNF1Q)
    - [鈴木貫太郎](https://www.youtube.com/channel/UCye8PYMLvXg-h48lTPFwb2w)

### 競技プログラミングの勉強
 - 競技プログラミングの解説記事を読む  
　Qiitaのランキングにも上がるような有名記事を読みました。競技プログラミングでキーワード検索して、ストック数順に並び替えるだけで高品質な記事にアクセスできます。  
　仕事ではC言語を用いているのですが、c++の組み込み関数が事実上必須なので、c++特有のコーディングを身につけるために写経もしました。  
　参加している人は有名記事を読んでいるような人ばかりなので、現状は読まないと茶色になるのも厳しいような状態になっていると思います。是非読みましょう。
 - バーチャルコンテストへの参加  
　[AtCoder Problems](https://kenkoooo.com/atcoder/#/table/)という外部サイトで開催されているバーチャルコンテストに参加しました。単品で解いていくのは私のモチベが上がりにくかったので、バーチャルコンテストに参加することにしていました。  
　問題を解くことがやはり重要なので、問題が解けるならバチャではなくていいかもしれません。
 - 自分用まとめの作成  
　[こちらの記事](https://qiita.com/yamatonao/items/3922a71d0eaa0218ac38)で、コンテスト中常に開けるチートシートを作りました。コピペ用関数だけではなく、焦った場合などに正常に取り組めるよう、初手の取り組み方なども記載してます。
 - 蟻本  
　バイブルと巷で噂の競技プログラミングの本です。私は購入しましたが、難しく、正直オススメしません。  
　初級編の幾つかの問題に取り組みました。ただし、茶コーダーでは中級編はかなり難しく、実質初級編にしか取り組めなかったです。  
　最近は多くの高品質な解説記事がネット上に存在するので、個人的には取り組まなくても緑Coderになれると思います。私はあまりお値段分の価値を感じませんでした。  
　ただし、掲載されている問題とほとんど同じような問題が本番で出題される場合があるので、通読しておくと救ってくれる場合があります。

### その他の勉強
　思うようにレートが上がらない中「努力が大事であり、いつか結果に結びつく」というメンタルを維持するのが大変でした。
　爆速で水色になった色変記事もQiitaのランキングに上がり私のモチベに容赦なくダメージを与えていく環境で、なんとか今度こそは休止せずにレートを上げるという意識を維持するために、「モチベを維持し結果を出し続けている方」の本を読んで、どのような意識を学ぶことにしました。
　私は、格闘ゲームのウメハラさんや将棋の羽生善治さんの書籍などを読みました。
　結果を出しているような方の本を読んでいると面白いもので、私が読んだ限りの多くの本で、結果を追うのではなく楽しむことが大事といったことが記載されています。
　結果を出した方の著書を読んで、同じように無理やり考え続けることで、緑Coderまでモチベを維持することができました。
　他にも、[このような記事](https://koheu.com/khu-howtobeachampion)に心を支えられました。(書いていること一緒ですね。私も思います)
　また、苦しいときには[ポエム記事](https://qiita.com/yamatonao/items/1d7139c34c3c852fabff)を書いてリフレッシュしました。(書くだけで結構楽になれました)

# 最後に
いかがでしたでしょうか。灰、茶の方に少しでも役に立つような記事になっていれば嬉しいです。
個人的な話ですが、実は転職を考えていて、大阪近辺で働ければと思っています。緑コーダー、どうですか。
是非ご連絡いただければと思います。

ここまでお読みいただきありがとうございました。