AtCoder茶色になるために【AtCoder入茶記事】

# 2年半前の挫折を経て入茶しました！
![スクリーンショット 2024-02-25 15.42.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773080/5b3908ae-feda-e414-07ab-1c475b756a43.png)

## こんな人におすすめ
- 時間をかけてでも入茶したい人
- 天才じゃない人
- これからAtCoderを初め

私は入茶するまでに25回コンテストに参加しました。
これは大分遅い方なので、頭のいい方は数回の参加で入茶されます。
自分よりも後に始めた人が、数回の参加で自分のレートを抜かした時はメンタルにきます...。
そんな凡才な私だからこそ、上記のような人に読んで欲しい思いがあります。

## 自己紹介
- 入茶時点で大学一年生
- 私立大学の情報系の学部に所属
- 数学は得意でない


## 競プロを始めたきっかけ
### 高校生の頃
高校生2年(2021)の頃に競プロを始めようと思い、2度コンテストに参加しました。
参加した２回共にA問題しか、解けずに挫折しました...。その当時はFlutterをやっていたのでプログラミング未経験ではありませんでした。あまり競プロの楽しさがわからないまま、気づいたら競プロから離れてしまっていました
### 大学生で再開
大学で知り合った友人の影響で競プロを再開しました。その人は文系なのですが、高校生の時点で水色コーダーだったそうです。そんな友人に触発されて、競プロを再開しました。人との出会いって大切だなって常に感じてます。

## 今まで解いた問題
今まで解いた問題などは[AtCoder Problems](https://kenkoooo.com/atcoder/#/table/)で確認できます。知らなかった方はぜひ活用してください！

### Achievement
![スクリーンショット 2024-02-25 22.18.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773080/4084b487-494c-5293-bb57-cef1ec0baf35.png)


### Pie charts
![スクリーンショット 2024-02-25 22.17.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773080/1a55a4fb-fd22-47f3-97d2-a11c888645bd.png)
今まで解いてきた問題の概要はこんな感じになます。

## アルゴリズム
### アルゴリズムの必要性
まず、なぜアルゴリズムを学ぶ必要があるのでしょうか。それは計算量を改善するためです。AtCoderでは、実行時間に制限があります。つまり決められた時間内に正解を導き出さないといけません。A,B問題などではあまり計算量の改善が求められることがありません。しかし、それ以上の問題になると計算量を改善しないと制限時間オーバーで不正解になります。計算量を改善してより難易度の高い問題を解くためにアルゴリズムを学ぶ必要があります！！
私は鉄則本を使って勉強しました!

### 学んできたアルゴリズムとデータ集合
-  全探索
ほとんどの人が最初に学ぶアルゴリズムだと思います。n重のfor文などを使っているうちに身についていきます。ですので、様々な問題を解いているうちに、気づいたら使えるようになっている場合が多いと思います。
- set
ユニークな値を保持し、整列を勝手にしてくれている配列という曖昧な認識で最初はいいと思います。２分木で管理されています。そのため、配列をソートするよりも計算量が小さいです。 (違ったらごめんなさい)
- map
連想配列、辞書と言われているものです。まだ、使ったことがない人がいるなら是非学んでください！！！！
- 累積和
初めて勉強をしたアルゴリズムです。アルゴリズムというかテクニックに近いかもしれません。コンテスト中でも2度使ったことがあります。
- 二分探索
コンテスト中には使用したことはないです。インターンのコーディング試験で使ったので個人的には思い入れがあります。
- 動的計画法
DP(Dynamic Programming)とか言われてるやつです。結構な頻度で出てくるので、学ぶ優先順位は高いと思います。入茶するタイミングくらいで、みんな使えるようになってる印象があります。私はあまり使いこなせてないです...。
- UnionFind
使うだけならあまり複雑なアルゴリズムではありません。しかしUnionFindが出てくる問題はdifficultyが高いです。そのため高得点を狙うならぜひ勉強をおすすめします！

これらのアルゴリズムが使えるようになった頃には、自然と茶色になっているという方が多いと思います。

## 入茶したい全ての凡才に伝えたい
ここからが記事を通して伝えたかった本題です。特にこれからAtCoderをこれから始めよう、頑張っていこうと思っている方に向けてです。
### 茶色になる前に7割がAtCoderを辞める
茶色コーダーには才能がなくても、地道に努力すれば誰でもなれると思います。しかし7割以上の人が茶色になる前に競プロを辞めていることが現実です。つまり当たり前のことを言いますが、**辞めなければいつかレートは上がります**。だから、凡才な私たちが茶色になるためには辞めなければ良いのです。しかし、それでも7割以上のことはやめてしまいます。
ここで、私がAtCoderを続けるためにやったことを紹介します。根拠に基づいた再現性がある方法なので、ぜひ実践してみて欲しいです。

### 挫折しない方法
- **毎日やる**
これが一番大切だと思います。人は物事が習慣になるまでに平均で66日かかると言われています。そのため、66日くらいは毎日AtCoderをやってください。日によって簡単な問題があっても無問題です。ただひたすらに継続することが大切です。
下の写真が、私が習慣化になるまでのHeatmapです。だいたい100日弱くらいかかりました。~~間が空いている期間は旅行に行ってた期間です。~~
これも[AtCoder Problems](https://kenkoooo.com/atcoder/#/table/)で見れます。[AtCoder Problems](https://kenkoooo.com/atcoder/#/table/)では何日連続でAtCoderをやっているのかという指標(Longest Streak)が見れます。私の最高記録は65日なのです。それでも2250位くらいになります(ユーザー数は２0万人弱)。最初はこのLongestStreakも目標にするのをお勧めします。
![スクリーンショット 2024-02-28 12.23.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773080/7f1d71bd-0fc0-16ec-6cdc-5ed1ba00592e.png)

- **毎週コンテストに参加する**
これも毎日やることと同じくらい重要です。私たちのような初心者はabcの大会に出場すればいいです。私はこの **「コンテストに出場する」** ことを目標にしていました。レートが全然上がらなかったり、下がったりしても全然大丈夫です。回によって自分の得意な問題や他の参加者の状態などによって影響されてしまうからです。ただ、コンテスト出場という絶対的なものは自分の気持ち次第なので、その目標は確実に達成できます。

# まとめ
~~記事を下書きのまま三ヶ月ほど放置していました~~
競プロ界隈は、最近生成形AIの話題で持ちきりですね。
他人がどうであろうと純粋に競プロを楽しんで行きましょう！