これまでの競技プログラミングの取り組み
2024/03/03
私は大学に入学するまではプログラミングの経験がなかったのですが、競プロをきっかけにプログラミングを学び始めました。現在はアクティブに競プロをしているわけではないですが、これまでの取り組みについてまとめたいと思います。
競技プログラミングとは
概要
競技プログラミング(きょうぎプログラミング、英: Competitive programming、略称: 競プロ)とは、 解くべきプログラミング課題が与えられ、プログラムを作成し、解くまでにかかった時間や正解数などを競い合う競技
アルゴリズムやヒューリスティックなどのジャンルがあります。 アルゴリズムのコンテストの場合は、与えられた入力に対して正しい出力を返すプログラムをいかに素早く書くかを競う競技です。 問題を解くためには、アルゴリズムやデータ構造に関する知識、および素早く実装する力が求められます。
AtCoder
AtCoder は日本発の競技プログラミングサイトで、毎週土日にコンテストが開催されています。 現在 AtCoder のコンテストにはアルゴリズムとヒューリスティックのジャンルがあり、それぞれにレーティングがあります。 レートはコンテストの結果によって変動し、それに応じて色が付与されます。
これまでの取り組み
大学入学時点では漠然と「プログラミングを始めてみたい」という気持ちがありましたが、何から手を付ければいいかわからずにいました。 その時に、ふと競プロの存在を知り、ゲーム的な要素(レーティングシステム)に惹かれて始めました。
当時はプログラミングに関する基礎的な知識がなかったのですが、AtCoder で用意されている次の教材を利用して学び始めました。
ある程度プログラミングについての理解が深まり、問題が解けるようになってからはコンテストに参加してレートが上がるようになり、モチベーションを保ちつつアルゴリズムやデータ構造の学習に取り組むことができました。
大学 1 年生の頃は一番競プロに熱中しており、ひたすら過去コンテストの問題を解いていました。
学んだことのアウトプットとして問題を解くことができるので、飽きることなく続けることができるのが競プロの魅力だと思います。
以下が私のレート遷移です。(一度アカウントを作り直しているので、最初からのレート遷移ではないです。)


公式によると水色に期待できる能力は次のようになっています。
アルゴリズムの絡んだ開発が特技と呼べるような水準です。アルゴリズムの豊富な知識に加え、典型的な課題の言い換えも把握し始めており、多くの複雑な問題をアルゴリズム的な処理に落とすことが出来ます。
かなりのコーディング速度があります。課題を見てからロジックを考えるまでが早いので、上流工程において、ロジックをイメージしながら会話をする能力も高い事が想定されます。
例えば巨大なデータベースなどを扱うサーバサイドエンジニアなどは、常に計算量を意識する必要があるため、これくらいのレーティングを持っていると良い事が多いです。
まとめ
競プロのおかげで、プログラミングにおける基礎体力的な部分を鍛えることができたと思います。 この基礎体力は Web アプリ開発などにおいても役立っていると感じています。
最近は他の趣味などに時間を費やしているため、競プロにはあまり時間を割けていませんが、いつかはアルゴリズム青色になりたいなと思っています。 また、ヒューリスティックの方にも挑戦してみたいです。