みなさんこんにちは。Suzuneと申します。
ABC343で茶色コーダーになれました!この記事では茶色になるまでにやってきたことなどを通して、これから競プロを始める人に茶色ってどのくらい頑張ればなれるの?とイメージを持ってもらえればと思います。
目次
自己紹介
- 所属: 松江工業高等専門学校 情報工学科4年
- 使用言語:Ruby
- Twitter(X): @Suzune2741
レート推移はこんな感じです。
茶色の実力
Atcoderでの茶色の実力はAtcoder社 社長のchokudaiさんがご自身のブログで以下のように述べられています。
茶色になる条件は、Ratingが400以上になることです。茶色で保証できる実力ですが、正直、AtCoder内ではあまり高いレベルではありません。ただ、ここにたどり着く前に辞めてしまう人が多いので、十分にやる気がある人であるとは言えるでしょう。
なお、他社転職サイトと比較すると、このレーティングでも上位1~2%の最高ランクに到達出来る人が数割いるため、一般的には十分高いレベルであると言えます。
個人的な印象としては、
- 情報系の学生が茶色であれば、ちゃんと勉強してるなって印象になる
- 派遣で来たプログラマがAtCoder茶色だったら結構安心する
- 茶色があればエンジニアとしてアルゴリズム面においての安心感があるかと言われたら、正直物足りない
みたいな印象があります。スキル的に確実に保証出来る点は、
- 標準入出力、if、forなどの単純な操作はできる
- 問題文を正しく理解し、計算量を考えない仕様通りの実装をすることが出来る
の2点です。ただし、完全に上の能力しか持っていないと茶色になることはできず、
- MARCH理系学部以上に入れる程度の数学力や論理的思考力があり、数学的な工夫が必要な問題を正解出来る
- 典型アルゴリズムに関する知識を多く持ち、探索による全列挙や単純な動的計画法など、典型的な問題に正解することが出来る。
- コーディングや読解速度が早く、単純な問題を早く正確に実装することが出来る
などの特徴を持っていなければ、茶色になることはできません。このレート帯に達する人は本当にバラバラなので、保証出来る点は少ないですが、何かしらの強みを持っていなければ、茶色に到達することはできません。
もちろん、保証出来る点が少ないと言っても、コーディング試験でおなじみFizzBuzzなんかは全員が当然一瞬で組める水準です。
簡単に言えばプログラミングの基礎はできている。という感じでしょうか。
茶色になるまでにやったこと
①ABCに参加
どの練習よりも実際のコンテストに出るのが一番の練習だなと感じます。終わった後にTwitterで流れてくるどうやって解いたか。みたいな他の人のツイートを見るのも参加していると共感できたりして楽しいです。
②ABCのA,B埋め
A問題はプログラミングがある程度できるならやらなくてもいいかもしれません。
私の場合はAを解いて行く過程でRubyの便利なメソッドが知れたり、簡単な問題を解くことで「解ける!」という楽しさを維持したかったので解きました。
B問題はやるべきです。B問題を解けない人にC問題は解けないと思います。解けたとしても、B問題に時間をかけすぎるとC問題取り組める時間が減るので、できるだけ早く解けるように問題数をこなしました。
B問題をやるうちに言われたとおりに実装する。という力が向上したと思います。
③できそうなC問題を解く
やっていてB問題とC問題の間には壁があるなと感じました。
C問題からはB問題と違い、計算量を意識してコーディングをしないと不正解になってしまう問題が多くなってきます。計算量の意識と計算量の落とし方をC問題を解くうちに少し身についたと思います。
C問題を解くうえではアルゴリズムも大事ですが、私は連想配列(Rubyでいうhash)をマスターすることが大事だと感じました。連想配列を使うようになってからコンテストでもC問題まで解けるようになったりしました。
④ADTに参加
これは時間があったときに参加していました。実際のコンテストと同じような感じかつ、出題される問題もAABBCでちょうどいい難易度で楽しくコンテストに参加できるのでおすすめです。
これから
とりあえずの目標だった茶色にはなれましたが、緑コーダーや水コーダーの人より圧倒的にアルゴリズムの知識、数学的思考が足りていないのでそこを頑張ってつけていきたいです。
具体的にはCの上位diffやD問に埋めていきたいと思います。
最後に
AtCoderのコミュニティとか興味あるので招待ください👀