【AtCoder】中学生が半年で入緑したときにやったこと

# はじめに

はじめまして！　**中学2年生**の**AwashAmityOak**と申します！　**Python**歴5年、最近の推し言語は**Rust**です。今回はQiitaに**初めて**記事を投稿させていただきます。

# 入緑！

(本題は「[実践したこと](#実践したこと)」まで飛んでください。)

私は2023年9月末、学校の<font color="red">**友達に誘われて**</font>AtCoderを始めました。以前から競技プログラミング(競プロ)やAtCoderの存在は知っていたのですが、<font color="red">**今の自分には必要ない**</font>と思っていました。しかし、友達がAtCoderでRatingを上げるにつれて、プログラミング力も上達しているのを感じ、<font color="red">**負けていられない**</font>と思ってやり始めました。

2ヶ月も経たず、順調に<font color="#884400">**茶Coder**</font>になり、その後も着々とRatingを伸ばしていったのですが、始めてから<font color="red">**3ヶ月半ほどで停滞期**</font>に入ってしまいました。しかし、その後の努力が実り…、

|　|
|:-:|
|![atcoder_graph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742876/ddae9e7a-9ebd-2adc-6669-7c5884b35661.png "AtCoderでのRating推移")|
|<font color="gray">AtCoderでのRating推移</font>|

2024年3月9日の[ABC344](https://atcoder.jp/contests/abc344)で<font color="red">**初めて5完**</font>し、<font color="#00FF00">**緑Coder**</font>になることができました！

今回は、そのために何をやってきたかについて書いていきます。

# 実践したこと

:::note warn
「過去問のC問題以下を埋める！」とか「この書籍で猛勉強する！」とか真面目な人たちがやっているようなことは、一切やっていません。
:::

:::note info
私は、AtCoderでは、<font color="red">**主にPython**</font>を使用しています。
:::

## 1. 過去問を解く

基本的なことです。[AtCoder Problems](https://kenkoooo.com/atcoder)で、ちょこちょこ問題を解いて、<font color="red">**経験値を積んで**</font>いきました。しかし、そこまで積極的にやっていなかったので、私の場合は<font color="red">**あまり意味がなかった**</font>のではと思っています。

## 2. アルゴリズムを学習する

競プロに出てくる<font color="red">**典型的なアルゴリズム**</font>を学習しました。理解度を五段階評価して、高い順に並べてみます。緑Coderになるための必要な知識として、参考にしてください。

### 全探索 (理解度: ⭐️⭐️⭐️⭐️⭐️)

キホンのキ。多分一番最初に覚えた。bit全探索はギリギリできる。

### 累積和 (理解度: ⭐️⭐️⭐️⭐️⭐️)

一番好きなアルゴリズム。

### 二分探索 (理解度: ⭐️⭐️⭐️⭐️☆)

ソートされてる場合だけ使える速いやつ。テンプレート無しに書くことはまだできない。

### 深さ優先探索(DFS) (理解度: ⭐️⭐️⭐️☆☆)

基本的なことはわかるけど、双方向のやつとかの派生版はまだ理解してない。

### 幅優先探索(BFS) (理解度: ⭐️⭐️⭐️☆☆)

基礎はわかる。派生版のダイクストラ法は少しわかる。

### 動的計画法(DP法) (理解度: ⭐️⭐️☆☆☆)

1次元だったらできる。2次元になると、ナップサックとかの典型問題以外は、ほとんどわからない。

### その他諸々 (理解度: ⭐️☆☆☆☆)

Union-Findとかもできるようになりたい。

---

とりあえずこの辺のアルゴリズムを覚えていれば、<font color="red">**緑Coderになることは可能**</font>だと思います。

## 3. C++を勉強する

[AtCoder Programming Guide for beginners(APG4b)](https://atcoder.jp/contests/APG4b/)を一通りやりました。でも、<font color="red">**たまにしかC++を使わない**</font>ので(大体Pythonでいける)、そこまで有用性があったとは思いません。

あと、今の時代はPythonコードをC++に変換してくれる[ChatGPT](https://chat.openai.com)があります。そのため、基本的な構文さえ抑えていれば、緑Coderになるためには、<font color="red">**C++を書けるようになる必要はない**</font>と思います。(あくまで私の考えです。)

# 今後、学習したいこと

私の目標は、今年の7月末までに、<font color="#00FFFF">**水色Coder**</font>になることです。そのため、ダイクストラ法やUnion-Findなどの<font color="red">**まだ学習していないアルゴリズム**</font>を使えるようにしたいです。(過去問も積極的に解いていかないと、身につかないよなあ…。)

# 余談

|　|
|:-:|
|![abc344_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3742876/cb8bc96f-0281-371b-0b08-f55e014c9cbd.png "ABC344の成績")|
|<font color="gray">ABC344の成績</font>|

緑Coderになることができた[ABC344](https://atcoder.jp/contests/abc344)の[E問題](https://atcoder.jp/contests/abc344/tasks/abc344_e)では、終了時間まで<font color="red">**残り5分**</font>のところで、自分のコードにバグを見つけ、提出したら<font color="red">**AC**</font>を取れました。<font color="red">**終了時間間際**</font>だったのと、<font color="red">**初めての5完**</font>だったのとで、しばらく興奮が収まりませんでした。競プロをやっているとこういうこともあるので、競プロを始めようか悩んでいる人は、<font color="red">**ぜひコンテストに参加してみてください**</font>！

# おわりに

Qiita投稿は初めてなので、思ったより記事を書くのが大変だということに気づきました。多分、こんな丁寧な記事は、当分書かないと思います。

競プロに関しては、これからも<font color="red">**日々精進して**</font>参りたいと思っています！

---

この記事が良いと思ったら、ぜひいいねとフォローをよろしくお願いします！　Qiitaを動かすにあたって、$\mathbb{X}$のほうも新しくアカウントを作ったので、そちらもフォローなどしてくれると泣いて喜びます！

https://twitter.com/AwashAmityOak

最後まで読んでくださり、ありがとうございました！