Atcoderで緑に到達することができたので、勉強した内容と感想についてまとめたいと思います。何番煎じの内容か分かりませんが少しでもこれからAtcoderを始める人の助けになれば幸いです。
自己紹介
・化学系の大学院出身で社会人2年目、情報工学についてきちんと学んだことはありません。
・数学は理系大学院出身としては普通くらいの能力です。
・使用言語はPythonで,C++もコードを読んだりA,B問題の実装程度ならできます。
・プログラミングは社会人になってから勉強を始めました。(簡単なコードなら大学院時代にも書いていました)
やったこと
過去問を解いているとレートが上がった、結局はそれだけなのですが効率をあげるために意識した2点についてまとめました。
1. 適切な難易度の問題を解く
これは私が解いた過去問の実績です、特徴としては茶色問題の解いている比率が高い、水色問題の解いている比率が低い点かと考えています。灰色問題もそこそこ解いているように見えますが、これはC++の学習のため解いた問題が3割ほどありレートを上げる目的では解いていません。 このような実績になった理由として、緑レートに到達のできない段階では茶色問題に出るAtcoder頻出アルゴリズムについて正しく理解することがまず重要、水色問題は難しく学習の効率が悪い(その問題の本質を正しく理解できない)と考えたからです。緑色問題についてはレートが800近くなり茶色問題に苦労せず解けるようになってから取り組んでいます。2. 自分の学ぶべきアルゴリズムを理解する
他の方の緑到達記事にも書いてありますが、緑レートまでに理解すべきアルゴリズムは数で言えば10個程度です。10もあれば得意なもの、苦手なものが出てくると思います。苦手なものを重点的に勉強しましょう。ちなみに私は二分探索とDPが苦手です。。
アルゴリズムの勉強法として私は一度解いたことのある問題について実装を繰り返すという方法で勉強しました、理解していることと実装は別の問題なので実装の勉強は新しい問題を解くのとは別の方法でやることがいいのかもしれません。
最後に
私はデータサイエンス分野に興味があり仕事でもそのような内容に携わっています。(kaggleへの取り組みについても書いてあるのでよければ読んでみてください。)
そのためもともとはアルゴリズムといったものには興味もありませんでしたし、業務にも活きないだろうと考えていました。しかし実際にAtcoderを通して学んでみるとアルゴリズムを考えることは面白いし、業務にも活きているなと感じます。計算量を意識したプログラミング、コーディングのスピード、バグの発見までの速度と行ったもので特に感じています。ですのでアルゴリズムに興味がないな、という方にもAtcoderのような競技プログラミングに一度は取り組んでみていただきたいなと思っています。