imomoの勉強記録

主に勉強の記録などを残していきます

AtCoderのレーティングが茶色になりました!

こんにちは、情報系学生のいもべんです。今回は茶色に上がったとのことで、これまでやってきたことや始める前の知識などを書いていきたいと思っています。誰かの励みになれば幸いです。

AtCoderを始めるまで

AtCoderに出会う前

私はプログラミングで何かを作ることがとても好きで、オセロだったりテストの問題を自動で出題してくれるものだったりを作成して遊んでいました。何かを作るには「こんな機能ほしいなー」のような思いつきが必要で、思いついたら楽しそうだから作る、を繰り返していました。
ここまで見ると凄いな思う方もいるかもしれませんが、思いつきが起きるのは稀で普段はゲームばかりして寝ての怠惰な生活を送っていました。

競技プログラミングの存在を知る

そんな中たまたま競技プログラミングというものを知り、そしてたどり着いたのがAtCoderでした。どんなことをやっているのかと思いサイトを見るのですが、どこを見ればいいのか分からない という状況に陥りました。いろいろ調べて知ったのは

  • C++をイチから学べる教材がある
  • コンテスト?に参加してレート?をあげる
  • コンテストは毎週開催?

の3つでした。
C++はこれまでやったことのない言語だったのと、何かやることが欲しいと考えていたのでC++の勉強も兼ねてまずはAPG4bをすることにしました。

AtCoderを始める前の知識など

今コンテストに参加してみて思うのは数学力がとても大事、求められる知識が幅広いの2点です。
高校生時代数学は好きでしたが最近はあまり触れる機会がなく、数A、数Bなどはほぼ壊滅状態でした。
アルゴリズム力に関しても、授業課題などの簡単なものは解けますが、○○のアルゴリズム実装してといわれても検索して仕組みをよく見ながらやっと実装できる程度の実力でした。
控えめに言ってもAtCoderで戦う実力はあまりなかったと思っています。

AtCoderに参戦

コンテスト初参加

初めてABCコンテストに参加したのはABC150です。APG4bの2章が終わった時だったのを覚えています。


ここから何を勉強していったのだろうと思う方もいると思うのですが、まさかの何も勉強することはなくただコンテストに参加していく日々が続きます。APG4bも2章終わりでストップしてしまいます。
怠惰な性格が出てしまったんだなと思っています。だって何もせずともレートが上がっていくものですから…

レートが伸び悩むようになる

当たり前のことですが、勉強しなければそれまでの自分の実力までしかレートは上がりません。それを自覚したのが3月の中頃でした。実はなかなか忙しい時期でもあったのですが、レートが上がらないと自分としても面白くないしTwitterで繋がった他の競プロerさんに追い抜かれていくその焦りから勉強しよう!と思うようになります。

レートが上がるように努力し始める

まず最初にやったのが、環境構築です。これまでvisual studio code(以下VScode)でコンパイルから実行を行っていましたが、何かもっといいものがあるはずだ!と思い、たどり着いたのがこの記事でした。
qiita.com
この記事はVisual Studioを使って入出力を見やすくするもので、この記事を参考に環境構築を行い様々な拡張機能を追加しました。

競プロの環境構築としてVScodeのほうが検索に引っかかるのですが、なぜか自分はうまくいかないことが多くうまくいったこの環境で競プロを行っていくことを決めました。今現在もカスタマイズなどをして使っています。

伸び悩みから茶色へ

本題はここからですね。これまでの内容を読んで頂きありがとうございます。

アルゴリズムについて知る

まずレートをあげるようになるには、より多くの問題を解けるようにアルゴリズムを知る必要があると私は考えました。
ですが、ほかの方が書いたコードは追うの大変だしアルゴリズムを学んで何に使えるのか分からないしと悩みながら本屋に向かいました。

本屋でアルゴリズム関連の本をパラパラとめくりいい勉強になる本はないかと見ていくとこのような本に出合います。
www.shoeisha.co.jp
この本はアルゴリズムを現実で起こるかもしれないことに例え、それを絵と共に紹介してある本で、とても見やすく購入しました。
この本を見てどのようなアルゴリズムがあり、何に使えるのかを知りアルゴリズムへの知識を深め、章末にあるPythonの実装コードを基にc++で実装しなおして着実に知識を深めていきました。

この本を読み終えてからは自分で気になったアルゴリズムを過去問と共に実装してアルゴリズムと実装力を鍛えています。

APG4bを再開する

2章が終わって満足していたAPG4bを思い出し、また学び始めることとしました。そして3章を進めていく度「こんな便利なものが・・・」状態になりました。これまでは名前しか知らなかった機能やこう使えば簡単に実装ができることを知り、あの時途中でやめず継続していたらなと今では思っています

解けなかった問題の復習、解説放送

これはやる人にとっては当たり前だと思われると思うのですが、あまり解けなかった問題の復習をしておらずコンテスト終わったら問題どうだったかみたいな話し合いをして解説放送も見ずに寝たり他のことをしていました。今考えると解けないものを解くことで問題に対するアプローチが増えるのでやった方がいいのですが以前の私はやっていませんでした。
過去問を解くことで「どう実装するか」から「前回と同じように実装しよう」とすぐに浮かぶようになりますし、変なバグも起きなくなります。茶色に上がったコンテストでもこれを実感しました。

日々の精進を忘れない

先ほども述べましたが、やはり勉強はしないと自分の実力は伸びません。なので、日々の精進がとても大事になります。
今現在は、聞いたことのあるアルゴリズムを調べ過去問題と共に自分の知識を増やしています。
これからは予定となってしまいますが、AtCoder Problemsなどで一日5問解く、通称「あさかつ」、「よるかつ」と呼ばれているバーチャルコンテストに参加してより自分を成長させていきたいと思っています。

終わりに

これままでにやったことを箇条書きでまとめると

  • 自分がやりやすい環境構築をする
  • APG4bを最後までちゃんとやりC++に存在している機能について知る
  • 解けなかった問題の復習、日々の精進を忘れない

今あげたことがすべて当たり前だと思う方もいるかもしれません。ですが私自身はそれができていませんでした。これからはきちんと勉強をして自分の中のアルゴリズム力と実装力を鍛えより高いレートを目指して頑張ります!

長くなりましたがここで終わります。ここまで読んでくれた皆さまありがとうございました。