初投稿です。
今年の7月から競技プログラミング(AtCoder)を始めて、
12/28に行われたAGC41でついに緑色(rating: 800~)になりました!!
年末までに緑色になるというのを目標としていたため、ギリギリ滑り込めてよかったです。
このような記事は腐る程あるとは思いますが、緑色になって嬉しくなったので、
緑色になるまでにやったことを書いていきたいと思います。
1. 自分の背景
私は私大の電気電子工学修士卒で、特にプログラミングに慣れ親しんでいた訳ではありません。
授業でC言語の授業、研究でPythonを少し触った程度です。
今年の4月から半導体回路の設計、評価をする会社に就職しました。
私のいる部署ではプログラミングをする業務はありません(Excelマクロくらいは触ります)。
そんな私がプログラミングを本格的に始めたのは今年の7月ごろです。
というのも、会社での研修が終わり、7月から部署に配属され業務を始めたのですが、
・自分が思っていた業務と違う。
・先輩たちが鬼忙しそう。
・業務があまり好きになれない。
といった理由から早くも転職を視野に入れはじめ、
プログラミングだったらどこでも仕事できるという安易な考えから、プログラミングの勉強を始めました。
プログラミングの勉強を進めていくうちに、AtCoderという競技プログラミングの存在を知り、
・ゲームのような感覚でプログラミングが勉強できる。
・自分のプログラミングの実力が数値化される。
・またその数値化された実力(ratingのこと)で転職活動を行うことができる。(AtCoder Jobs)
ということに惹かれて、競技プログラミングのコンテストに参加するようになりました。
2. 現在の実力
19/12/28現在でAtCoderのコンテストには19回参加しました。
AtCoderのコンテストに始めて参加したのは19/7/20に開催されたABC134(AtCoder Beginner Contest 134)なので、緑色になるまでに大体5ヶ月かかりました。
最近のコンテストのパフォーマンスは900~1000くらいだと思います。
DFSやBFS、2分探索、簡単なDPなどはコンテストで使いこなせる実力です。
計算量改善も簡単な少しはできるかなって程度です。
数学に関しては強くないです。AtCoderの参加者の中では平均的だと思います。
また、他の競技プログラミングのコンテスト(CodeForceなど)には出たことがありません。
3. 緑色になるまでにやったこと
問題をたくさん解く
他の記事でも書かれていますが、問題をたくさん解くことは緑色になることに必要です。
その理由としては、
・競技プログラミング初心者の人は問題をたくさん解いて標準入出力に慣れる必要があるため。
・色々な種類の問題に触れて、自分の知識を増やすため。
があると考えています。
私が始めたばかりの頃は標準入出力が思うようにできなくて、
A問題、B問題でも時間がかかっていたなんてことがあったので、
問題をたくさん解いて標準入出力に慣れることは必要かと思います。
問題をたくさん解くことで徐々に解法が見えてくるようになります。
例えば、N=10**8などの問題で全探索するとTLEしてしまうから二分探索してみよう、とか
N=50兆なので、規則性を見つけたり、定式化するだとかの計算量的なアプローチを学ぶ、
bit探索で書いたら簡単にコードを書くことができる、といったことは色々な種類の問題に触れることにより初めて得られる知識だと思います。(特に初心者や、情報系出身でなくてアルゴリズムの勉強をしたことがない人)
なので、緑になりたい人はたくさん問題を解きましょう。
(問題を解いた数(AC数)、累計得点(Point rated sum)とRatingには相関があります。リンクはこちら)
コンテストに参加するときに目標を決める
私は年内に緑色になると決めてからは、「パフォーマンスを○○出す」考えてコンテストに参加していました。
そしてそのパフォーマンスを出すために、「C問題は○分までに解いて、D問題は時間内に解けたら何位に入れるなー」ということを考えていました。
特に初心者のときには、C問題までしか解けなくても、回答スピードが早ければある程度の順位、パフォーマンスを獲得できます。
なので、目標とするRatingがある人はコンテスト毎に目標を立てて、問題を解くスピードを意識しながらコンテストに参加しましょう。
4. これからやること
これからやること、やりたいことは3つ程度あります。
・水色を来年の7月までに達成する。
・Kaggleに参加してsoloでブロンズメダルを獲得する。
・転職活動のためにポートフォリオを作る。
1つはAtCoderでRatingを1200まで上げて水色になりたいと思っています。
水色のレベル感としては、アルゴリズム力的には十分で会社でも戦力になる?らしいので、
競技プログラミングを始めてから1年となる7月までに水色を達成したいと思っています。
ただ、水色パフォーマンスをまだ1回しか出してないのでもっと時間がかかりそうです。
なので、蟻本を読み始めようかなと思っています。
また、最近はData Scienceの方にも興味があるため、Kaggleの方にも手を出しています。
今はCourseraでKaggleに関する講義を受けていて、コンペにも参加しています。
とりあえずメダルを一つくらい欲しいと思っているので、4月までにsoloでブロンズメダルを獲得したいと思っています。
あと、転職活動のためにポートフォリオを作りたいと思っています。
一度ポートフォリオ的なものを作りましたが、最近は競技プログラミングとKaggleをやっているため触れられていません。
転職活動をするにはおそらく必須だと思うのでぼちぼちやっていきたいと思っています。