【色変記事】実務未経験がAtCoderで水色になるまで

2021/08/21に行われたABCでパフォーマンス1623をとって、入水しました。
![スクリーンショット 2021-08-22 18.01.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651979/85ec3a64-7da9-efaa-8fa1-355637cfbb5a.png)
ギリギリ水色になれた感じなので次回のABCでまた入緑するかもしれませんが。

# 当日のコンテスト振り返り

A〜Eまでの5完でした。
E問題は一週間前に履修したばかりのbitDPを使う問題でしたが、精進の成果が出て良かったです。
入水するかどうかの微妙なパフォーマンスだったので、コンテスト終了までドキドキしながら順位表を眺めていました。  

![スクリーンショット 2021-08-21 22.41.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651979/d9fc358a-d022-5aee-c5a0-8208be811c35.png)

# 自己紹介

[AtCoderのアカウント](https://atcoder.jp/users/nizi24)

高卒で非IT系勤務の社会人です。ITエンジニア目指して1年半ぐらい独学してます。
WebアプリとかiOSアプリとか作りました。応用情報、基本情報とったりもしました。

↓作ったアプリの紹介記事
[独学半年の実務未経験がRails＋Nuxt.jsでSPA作ったので見て欲しい](https://qiita.com/nizi24/items/d12e9642b9774670a6ae)
[独学でAppStoreにアプリを公開するまで](https://qiita.com/nizi24/items/5896ed8d19f93e25ed38)

Twitterでフォローしている人がAtCoderを始めているのを見て、コンテストに参加することに決めました。
もともとPaizaでBランクの問題が解けないぐらいの実力しかなかったため、実装力を高めたいと考えていた、という理由もあります。

# 初参加から今までの振り返り

## コンテスト初参加

2021/01/10に行われたABC188が初参加でした。
ABの2完で初めてついたレーティングが4と、かなり苦労していたのが伺えます。
この回のC問題は灰diff前半と簡単な部類だったはずなんですが、それすら解けないぐらいの実力しかありませんでした。

![スクリーンショット 2021-08-22 17.16.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651979/25d6c6c5-35cc-8394-2186-990dae1af0a8.png)

## 茶色になるまで

![スクリーンショット 2021-08-22 18.03.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651979/9fa638f3-a004-e7c0-156d-029b46620052.png)

3回目ぐらいまではRubyを使って参加していたのですが、問題の解説記事などはC++を使って書かれていることが多かったため、C++を勉強することにしました。
AtCoder公式のC++入門コンテンツである、[APG4b](https://atcoder.jp/contests/APG4b)にお世話になりました。

C++の勉強と並行して、問題を解くことになれるためにA、B問題をたくさん解きました。
最初はC問題が全く解けなかったのですが、問題形式になれたためなのか解けるようになり始めていました。

↓[AtCoder Problems](https://kenkoooo.com/atcoder#/table/)のグラフです。
解いた問題の量と難易度がわかります。1月後半ごろにすごい量の問題を解いていることがわかります。

![スクリーンショット 2021-08-22 17.33.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651979/7e0f8ae7-e27b-97c5-cd73-e50b8e0a93b7.png)

### 茶色になるまでにしたこと

- ABCのA、B問題を早く解けるようになる
- C問題を解けるようになる
- [けんちょん本](https://www.amazon.co.jp/%E5%95%8F%E9%A1%8C%E8%A7%A3%E6%B1%BA%E5%8A%9B%E3%82%92%E9%8D%9B%E3%81%88%E3%82%8B-%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0-KS%E6%83%85%E5%A0%B1%E7%A7%91%E5%AD%A6%E5%B0%82%E9%96%80%E6%9B%B8-%E5%A4%A7%E6%A7%BB-%E5%85%BC%E8%B3%87/dp/4065128447)を読み始める

## 緑になるまで

![スクリーンショット 2021-08-22 18.04.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651979/745ca9e7-5576-1218-fcb2-0233d023bbad.png)

下の画像は[AtCoder Problems](https://kenkoooo.com/atcoder#/table/)で見れるヒートマップです。
その日に解いた問題の最高難易度を元に色が変化します。

見てわかる通り、緑diffを中心に問題を解いていました。
この頃にはコンテスト本番で緑diffを解くのが安定するようになり、緑後半のパフォーマンスが出せるようになっていました。

<img width="300" alt="UWAplJVP9YKQcYf1622363870_1622363964.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651979/cf7d7c92-0b8f-76fe-1611-656a26bd47d1.png">

### 緑になるまでにしたこと

- 緑diffの過去問を埋める
- アルゴリズムを勉強する
  - BFS、 DFS、ダイクストラなどのグラフアルゴリズム
  - 約数列挙、素因数分解などの整数系のアルゴリズム
  - UnionFindなどのデータ構造
  - 動的計画法、bit全探索

アルゴリズムは他にも勉強した気がしますが、よく覚えてないです。

## 水色になるまで

![スクリーンショット 2021-08-22 18.01.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651979/85ec3a64-7da9-efaa-8fa1-355637cfbb5a.png)

停滞してる時期もあります。
ヒートマップ見るとわかりますが、全然精進できていません。
この時期は高校数学の復習をしたりしていて、問題を解く時間はあまり取れていませんでした。
おかげで3ヶ月ぐらいレートがあまり変動しませんでした。
実力が上がらないだけでなく、緑diffの問題も解けなくなっていたので、少し問題解く力も落ちていたかもしれません。

![スクリーンショット 2021-08-22 18.06.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651979/87651580-aea5-e2ae-26d8-325a8bed350b.png)

ここ３週間ぐらいは週末に水diffを解くようにしているので、レートが伸び始めて来ました。

6月末からはてなブログで問題の解法記事の執筆を始めました。
自分が過去解いた問題を復習しやすくする、解法を整理する、という目的で書いています。

https://nizi-24.hatenablog.com/


# 水色になるまでに覚えたこと

- 累積和、しゃくとり法、imos法
- 二分探索
- bit全探索
- BFS、DFS、UnionFind、ダイクストラ法、ワーシャルフロイド法
- 動的計画法、メモ化再帰、桁DP、bitDP
- セグメント木、遅延セグメント木
- 高速な約数列挙,素因数分解、繰り返し二乗法
- modint

名前の付いているアルゴリズム、データ構造を適当に列挙してみました。
典型的な考察手法とか名前の付いていないテクニックも覚えたりしているので、実際にはもっと勉強しています。

# これからについて

青色も目指したいと考えています。
水diffになる問題を60分以内に解くことができれば、青パフォ出るので不可能ではないと思っています。

しばらくは水diffを安定して解くことを目指したいと考えています。
青パフォ２回だしてなんとか入水できましたが、水パフォ安定はできていないので、それができないとまた緑に戻りそうだなと思っています。

# AtCoderを始めて良かったこと

・コードの計算量が分かり、効率的なアルゴリズムを選択できるようになった。
・複雑な実装を素早くできるようになった。
・学習のために他の人がコードをよく読むようになったので、コードを読んで理解するスピードが速くなった。
・考察能力が上がり、複雑な問題を解決する方法を学んだ。

# 最後に

下の画像は自分の精進グラフです。
精進している時期は伸びてしてない時期は停滞しています。
やはりレートを伸ばすには精進が一番です！
皆さん精進頑張って参りましょう！

![スクリーンショット 2021-08-22 18.41.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651979/ccead44c-55f2-abff-3789-4ffb4ef813fb.png)