はじめに
競技プログラミング(競プロ)を始めて約二ヶ月経ち、生活の中に競プロが浸透してきたと感じたので、約二ヶ月を通して感じたこととこれからの予定を本記事にまとめます。
また、初心者の方は、本記事より前にAtCoder に登録したら次にやることを読むと良いと思います。
(1) 競プロで感じたこと
以下では、競プロを通して感じたことをまとめます。
[1] Pythonは遅い
今まで主にPythonでプログラミングをしてきたのですが、実行速度について意識したことがありませんでした。しかし、言語ごとで実行速度が異なるため、言語によっては正答の通りにコードを書いてもAcceptされないことが稀にあります。特に自分の使っているPythonはインタプリタ型の言語であるため、C++などのコンパイラ型の言語などと比べると、10~100倍程度遅いです1。
[2] 競プロ≒受験数学
受験数学は時間内により多くの問題を解く性質の競技であり、競プロも同様の性質を持ちます。また、いずれの競技にも典型問題が存在し、成果を出すためには典型問題で完答することが必要不可欠です。
[3] 基本文法や基本アルゴリズムは必須
競プロを始めた際にはPythonの基本文法を一通り学んだ程度であり、完全には基本文法を覚えていませんでした。AtCoder Beginner Contest(ABC)では、A問題及びB問題は入力、出力、if文、ループ程度を知っていれば解くことができますが、それ以降の問題では基本文法を使いこなせないと解くことが難しいと感じました。また、特にD問題以降では基本的なアルゴリズムの知識も必要とされるため、単純な頭の体操ではないと感じました。
[4] 慣れが重要
コンテストに出るほど問題を解くことに慣れていき、高いパフォーマンスを出すためにはこの慣れが非常に重要です。また、典型問題の場合は多くのコンテストでその問題を目にするため、考えずとも解けるという状態になります。この状態にすることで、より高速に問題を解くことができ、難しい問題への思考時間を確保することができます。
[5] 強い人を見つける
自分よりも上のレベルの人を見つけることでモチベーションが上がり、勉強方法を真似ることもできるので、お勧めです。幸いにも自分の周りにはレベルの高い人が沢山いるため、勉強の励みになります。周りにいない場合は、Twitterなどで探すと良いのではないでしょうか。
###[6] 復習をする
[4]で多くのコンテストに出て慣れることが重要であると書きましたが、効率良く自身のレベルを上げるにはコンテストで出た問題を毎回しっかり復習することが重要だと思います。僕は、コンテストに参加した時に解いた問題全てとコンテストに参加した時に解けなかった問題のうちの一問を復習するようにしています。
ただ、理解ができない問題をいきなりやるのは無意味なので、問題のレベルを見て解くのも良いと思います。AtCoder Problemsでは、それぞれの問題名の色が「50%の人が正解できているレートの色」に対応しているので、参考にすると良いと思います。
(2) これからの予定
以下では、競プロでこれから取り組もうと考えていることをまとめます。
[1] バチャコンをやる
ゲーム性の高いものに面白さを感じるので、バーチャルコンテストを開いて過去問を解いていきたいと考えています。できれば二日に一回くらいのペースでやりたいと考えていますが、学校の授業の課題の進み具合と相談して進めようと思います。
[2] 学校の課題を頑張る
アルゴリズムの基本を扱う授業を取ったので、その授業の課題を全力で頑張りたいです。
[3] 螺旋本を進める
螺旋本を買ったにも関わらず基本的なアルゴリズムを学んだら飽きてしまいました。避けては通れないと思うので、そろそろ取り組みたいと考えています。
-
競プロの範疇での話です ↩