孤独にそっくり

開いている窓の前で立ち止まるな

【競プロ】2020年8月〜2020年12月学習の足跡

最近サボリ気味になっているため、自戒のために振り返り記事を書いてみる。
AtCoderで茶色になった暁には、改めて記事を書きたい。

なぜ競技プログラミングを始めたのか

もともと何となく競技プログラミングの存在は知っていた。
8月に無職になり、次はエンジニアになろーっとふんわりと考えていたときに、エンジニアとしての教養を高めねばと思いたち始めてみた。

学習の足跡

学習の足跡は以下のような感じだ。

  • 2020年8月:『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』(螺旋本)を頭から読み始め、C++は触ったことがなかったが、なんとなく写経してみる
  • 2020年9月前半:『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』を13章まで読み終えるが、頭に何も残っていないことに絶望し、一旦諦める
  • 2020年9月後半:そもそもC++に入門したことがなかったので、APG4bを履修する
  • 2020年10月:AtCoder過去問精選 10 問の記事の問題と類題を解く
  • 2020年11月前半:AOJのITP1を一周する
  • 2020年11月後半:素晴らしい記事(後述)に出会い、全探索のいろはを学ぶ
  • 2020年11月後半〜現在:AtCoderの過去問を解く

まあなんというか、始めの2ヶ月間はほぼ徒労だったと言っていい。
たくさんインプットした筈なのに、何一つ覚えていないし身になった気もしない。
螺旋本は、ある程度問題や実装になれて、アルゴリズムが必要になったら、必要になっただけ参照する使い方が良いのかなと思う。
自分のように素養がない人間が頭から読んでいっても、辛いばかりだった。
アルゴリズムやデータ構造が互いにどういう関係性にあるかはわかりやすいので、手元にあって損はしないと思う。

今から始めるならどうするか

以下の記事に従って、勉強をすすめていくのが最も効率的だと思う。

qiita.com

この記事自体は、11月後半ごろに見つけたもので、結果的に自分はほぼ同じような足跡をたどっていたわけであるが、最初から地図を持っているのとそうでないのは、学習を進めていくメンタル面で大きな違いがある。

現在の実力

AtCoderのコンテストに参加し始めたのはつい最近のため、当然灰色コーダーでレートも低い。早く茶色コーダーになりたい

f:id:ponkim:20201211200725p:plain

ABC過去問の虚無埋め状況は以下。できれば毎日4,5問は解きたいところ

f:id:ponkim:20201211194458p:plain

自分の体感としては、知識の部分では、茶色コーダーに必要な条件は満たせつつあるのかなと思っている。
A、B問題はだいたい解けるし、C問題も5割くらいは解けるようになった気がする。

しかし、実際に過去問を解くと、型の扱いでバグらせてしまったり、二重ループを単純ループに効率化出来なかったり、数学的考察が思いつかなかったりで、なかなかうまくいかないこともある。

コンテスストでもWAを出しがちなので、そこらへんもカバーしていきたいところである。

今後の予定

簡単な問題を解くのは性分にあっているようで、虚無埋めが楽しい。
なので、ひとまず過去問をゴリゴリ解いて練習を重ねていきたい。

並行して水色コーダーになるための条件である、アルゴリズムとデータ構造の学習に努めたいが、そちらは遅々として進んでいない。

深さ優先探索はやったが、幅優先探索の途中で止まってしまっている。そのあとには、ついにDPに着手したりしたいのだが、日々の時間が惰眠とポートフォリオ作成に費やされていて、腰を落ち着けて勉強できていない(という言い訳)

ひとまず、そろそろポートフォリオ作成のほうが落ち着いてくると思うので、そうしたらアルゴリズムの勉強もすすめて、典型問題の緑色diffくらいは解けるようになりたい。

目標としては、無職期間の終焉である来年の2、3月ごろまでに緑色ないし水色になりたいと思っている。

今後は手間取った問題など、外部記憶装置として記事に残していきたい。