⌚ 2020/11/ 2 (Mon) 🔄 2024/3/20 (Wed)
競プロのススメ
はじめに
家にいる時間が長くなり、春から新しい趣味として競技プログラミングを始めました。
まだまだ初心者ですが、取り組んだことのない方に向けて競技プログラミングを紹介します。
競技プログラミングとは
競技プログラミングとは「プログラムを使って与えられた問題を解く早さを競うスポーツ」です。
筆者はAtCoderで週末に開催されるコンテストに参加しています。
このコンテストでは次のような問題が出題されます。(AtCoder Beginners Selectionより引用)
基本方針としては、for文を使って条件を満たすパターンが存在するのかを調べます。
ただし三重ループを回すと N の3乗で計算量が増えていくので、、、と計算方法を工夫する
必要があります。
問題へのリンクをこちらに記載しておくので、もし興味があれば実際に解いてみてください。
競技プログラミングの良いところ
競技プログラミングを始めて感じる「競技プログラミングの良いところ」を紹介します。
-
簡単な問題は知識がなくても考えれば解けるのですが、難易度が上がるにつれて
アルゴリズムの知識が必要になります。実務で難しいアルゴリズムの知識が必要に
なる機会は多くないとは思いますが、 競技プログラミングを通して身に付くアルゴリズムに
関する知見はシステムに関わる物事を考える上での普遍的な土台になると考えています。
-
問題を解くためには問題の構造を理解・整理した上で正しくプログラムに落とし込む
必要があります。このプロセスはシステム開発における「要件定義」から「テスト」までの
過程に似ていると感じています。その意味で、競技プログラミングはミニマムなシステム
開発と言えるのではないでしょうか。
-
これまでに参加したコンテストの成績を踏まえて「レート」が算出されます。
この「レート」はコンテストで良い成績を出すことができると伸びて、
逆に失敗すると下がってしまいます。恥ずかしながら筆者のレートのグラフを添付します。
-
Highestと表示されているところがレートの最高値です。(850)
このように自分の実力を客観的に知ることができるのでレートを基準に客観的な目標を
立てて取り組むことができます。とてもわかりやすくやりがいのあることだと感じています。
-
問題を数学的に理解して解き方を考える必要があるため、これまでより理路整然と
手順を踏むようにシステムを理解できるようになった気がしています。
学生時代に理系で数学が身近にあった方は、そのころの感覚を思い出せると思うので
おすすめです。頭の使い方や勉強の仕方が同じなので大学受験のための数学や物理を
勉強している感覚に近いです。
終わりに
しばしば「競技プログラミングは実務の役立つのか」という議論がされるように、
実務に役立つか否かは意見の別れるところでもあります。
一方で、競技プログラミングは純粋に楽しい遊びでもあります。
パズルのような問題を解くことは楽しいです。
結果が数値化されるので、記録を伸ばしていく楽しみもあります。
新しい趣味として「競プロ」はいかがでしょうか?
参考
- AtCoder <https://atcoder.jp/>
- AtCoder Beginners Selection <https://atcoder.jp/contests/abs/tasks/abc085_c>