AtCoderでついに入茶しました!!!

Atcoderを本格的に始めて4ヶ月強、ついに茶コーダーになれました!!
「とりあえず茶色になる。」と宣言してから2ヶ月ほど経ってしまいましたがとりあえずは一安心です!!!

f:id:ryusuke_920:20200921041645p:plain
自分のレート変化

目次

1. 自己紹介

2. 茶色の実力について

AtCoderの茶色(レートが400〜799)の実力についてはAtCoder社 社長であるchokudaiさんが下記のように評価しています↓↓

茶色になる条件は、Ratingが400以上になることです。茶色で保証できる実力ですが、正直、AtCoder内ではあまり高いレベルではありません。ただ、ここにたどり着く前に辞めてしまう人が多いので、十分にやる気がある人であるとは言えるでしょう。

なお、他社転職サイトと比較すると、このレーティングでも上位1~2%の最高ランクに到達出来る人が数割いるため、一般的には十分高いレベルであると言えます。

個人的な印象としては、

  • 情報系の学生が茶色であれば、ちゃんと勉強してるなって印象になる
  • 派遣で来たプログラマAtCoder茶色だったら結構安心する
  • 茶色があればエンジニアとしてアルゴリズム面においての安心感があるかと言われたら、正直物足りない

みたいな印象があります。スキル的に確実に保証出来る点は、

  • 標準入出力、if、forなどの単純な操作はできる
  • 問題文を正しく理解し、計算量を考えない仕様通りの実装をすることが出来る

の2点です。ただし、完全に上の能力しか持っていないと茶色になることはできず、

  • MARCH理系学部以上に入れる程度の数学力や論理的思考力があり、数学的な工夫が必要な問題を正解出来る
  • 典型アルゴリズムに関する知識を多く持ち、探索による全列挙や単純な動的計画法など、典型的な問題に正解することが出来る。
  • コーディングや読解速度が早く、単純な問題を早く正確に実装することが出来る

などの特徴を持っていなければ、茶色になることはできません。このレート帯に達する人は本当にバラバラなので、保証出来る点は少ないですが、何かしらの強みを持っていなければ、茶色に到達することはできません。

もちろん、保証出来る点が少ないと言っても、コーディング試験でおなじみFizzBuzzなんかは全員が当然一瞬で組める水準です。

このようにchokudaiさんは評価しています。茶色になるためには人によって本当に強みがバラバラだと思います。
自分の場合は、数学の問題が得意なので計算の問題が出たら(シグマ計算や組み合わせ)解ける確率が上がる一方、アルゴリズムを使用する問題に出会うとまだ正答率は低いです。

3. 茶色になるまでに取り組んできたこと

まずは4ヶ月足らずですが、精進してきたことを紹介したいと思います。

取り組んだ内容 取り組んだ時期(大まか) 重要度(個人的主観)
ABCのA埋め 始めて最初の2週間
ABCのB埋め A埋めが終わってから1ヶ月半
ABCのC100問AC B埋めが終わってから1ヶ月
茶色Diff半分AC C100問ACが終わってから2週間
灰色Diff埋め 茶色が終わってから2週間 超絶低

上記の表について軽く解説したいと思います。
※この重要度は完全な個人的見解となりますので、ご了承ください。

ABCのA埋め

これを低と判断したのは、A問題は「初めての言語を触ったけどコードの書き方が全くわからない。」や「if文ってどう書くの?」と言った本当に初期の段階でつまずく人向けにできている問題だと思っているので、20,30問程解けばそれ以上はほとんど実力が変わらないと思います。

ABCのB埋め

B埋めはやって良かったと思ってます。この頃はまだ、「for文の範囲がいまいち分からない(今も完璧ではない。)」や「早解きできるようになりたい。」と思っていたので、たくさん解いていました。その結果、実際に解くスピードが速くなったり、実装に若干ですが迷いがなくなってきた気がします。

ABCのC100問AC

C問題を100問ACはとても効果があったと思います。B→Cへの問題の難易度はとても上がっているように感じます。なので、たくさん解くことで様々なアルゴリズムを知ることができ、新たな知見を得ることができたので良いと思いました。

ABCの茶色半分AC

茶色埋めもやってとても良かったと思います。自分の目指している色だけあって、この色の難易度を解けるようにならないと色変しないんじゃないかと思いながら、必死に精進していました。

灰色Diff埋め

灰色埋めはやる意味は全くないと思います。それにも関わらずやっていた理由としては、「毎日最低1精進」を必ずやると決めており、この時期は大学のテストが被っていたこともあり、忙しかったためこうなってしまいました。

4. 学んだアルゴリズムについて

使えるようになったアルゴリズムは下記の表の通りです。

アルゴリズム 理解度(◎・○・△・×) 重要度(高・中・低)
素数判定
GCD / LCM
bit全探索
累積和
いもす法
素因数分解
幅優先探索(BFS)
深さ優先探索(DFS) ×
動的計画法(DP)
優先度付きキュー

理解度

理解度は何も見ずに書ければ◎、難しいのがきたら書けないと○、1度は書いたことあるだと△、1度も書いたことないが×となっています。

重要度

茶色になるには高度なアルゴリズムは必要ないと思います。
自分も実際のコンテストでよく使っていたアルゴリズムはGCDやLCM、累積和といったところです。
BFSやDFS、DPについては知らなくても茶色にはなれると思います。

5. 各種実績について

最後にAtCoder Problemsにあるデータをいくつか載せておきます。

Achievement

f:id:ryusuke_920:20200921052717p:plain

AtCoder Pie Charts

f:id:ryusuke_920:20200921052841p:plain

Difficulty Pies

f:id:ryusuke_920:20200921052930p:plain

Daily Effort

f:id:ryusuke_920:20200921053013p:plain

Climbing

f:id:ryusuke_920:20200921053036p:plain

Heatmap

f:id:ryusuke_920:20200921053111p:plain

Languages

f:id:ryusuke_920:20200921053134p:plain

6. 最後に振り返って

そこそこ長めの記事になってしまいましたがいかがでしたか?
この記事は特に灰コーダーの方に読んでいただいて、少しでも参考になって頂ければ幸いです。

自分は「緑コーダー」を目指してこれからも日々精進していこうと思います!

最後までありがとうございました!