こんにちは、アヅマです
大学に入って新しいこと挑戦しようと思っている人は多いと思います
せっかくやるなら将来役に立ちそうなことやりたいですよね
そこで今回は最近アヅマがハマってる競技プログラミングについて紹介していきたいと思います
競技プログラミングとは?
競技プログラミングという言葉、聞き慣れない方も多いと思います
競技プログラミング(以下、競プロ)とは「与えられた問題を解決するプログラムを書き、その速さを競う」競技のこと
例えば以下のような問題が出題されます
長さLcmの竿の上をn匹のアリが毎秒1cmのスピードで歩いています。アリが竿の端に到達すると竿の下に落ちていきます。また、竿の上は狭くてすれ違えないので、二匹のアリが出会うと、それぞれ反対を向いて戻っていきます。
各アリについて、現在の竿の左端からの距離x[i]はわかりますが、どちらの方向を向いているのかはわかりません。
すべてのアリが竿から落ちるまでにかかる最小の時間と最大の時間をそれぞれ求めなさい。
この問題はPOJというコンテストサイトで実際に出題された「Ants」という問題です。
与えられるL, n, x[i]を用いて答えを導くプログラムを書けば正解となります
解答・解説はこちらの本に載っています
どんな人にオススメ?
競プロは以下のような人にオススメです
- プログラミングに挑戦したいが、何からはじめれば良いか分からない
- パズルや謎解き、数学が好き
- 勝負事が好き
- プログラミング学んだが、プログラミングですることがない
- プログラミングを就職や進学に活かしたい
- アルゴリズムの勉強がしたい
プログラミングに興味あるけど、何から手をつけて良いか分からず困っているという方、多いと思います
そういう人はまず競プロにチャレンジしましょう
競プロは与えられた問題を解く、ただそれだけなので、やるべきことが明確です
そのため「プログラミングで何かを作りたい訳ではない」「とりあえずプログラミングを学びたい!」という人に最適です
また、競プロはパズルに非常に似ています
パズルや謎解き、数学が好きという方は競プロの魅力に取り憑かれしまうと思います
実際、高校生のとき数学オリンピックで活躍していた人が大学に入ってから競プロを始めることも多いです
他にも「就活や進学に役立つことがしたい!」「アルゴリズムやデータ構造の勉強がしたい!」という人にオススメです
競プロをやるメリット
競プロには以下のように様々なメリットがあります
- 就職や進学に役立つ
- 他大学の競プロerと交流する機会が生まれる
- 賞金がもらえる(かもしれない)
近年、AIや機会学習などのIT分野が世間の注目を集めています
それらの技術を支えているのがプログラミングです
今、企業はIT時代の波に乗り遅れまいと、プログラミングができる技術者を本気で集めています
そのためプログラミングさえ出来れば、食に困ることはまずありません
でも、「『競プロが得意』なのと『プログラミングが得意」』なのは違うんじゃないの?」「競プロ自体は就職に役立たないんじゃないの?」と思う人もいると思います
実はそうではないんです
競プロの問題はプログラミングの基礎が学べる”良問”が多く、競プロが得意に慣れば自ずとプログラミングが得意になります
さらに「競プロ自体は就職に役立たない」というのも誤りです
今やAtCoderJobsのように競プロの成績が就職にそのまま生きてくることも多いのです
進学に関していえば、筑波大学のAC入試や慶応大学のAO入試などで活動実績として紹介できたり、東京大学、慶応大学、会津大学の特別推薦入試枠がもらえることもあるそうです
院試でも役立つこと間違いなしでしょう
競プロのメリットは就職や進学だけではありません
競プロをやっている人(いわゆる競プロer)の多くはTwitterなどのSNSをやっていて、競プロのアカウントとSNSのアカウントが結び付けられていることも少なくありません
そのため競プロer同士の交流も生まれやすいのです
学生のうちに人脈を広げられるのは魅力的ですよね
さらに競プロのコンテストに勝つと賞金がもらえることもあります
優勝賞金10万超えのコンテストは結構ありますし、学生向けの大会なら努力次第で上位も十分狙えると思います
オススメのプログラミング言語
競プロはプログラミング言語を使って行います
ここでは競プロでメジャーなプログラミング言語を紹介していきます
C++
現時点で最も使用者の多いプログラミング言語です
C++が競プロで人気な理由は、他のプログラミング言語に比べて速度がはやいから
競プロでは解いた問題数と解く速さを競うので、その点ではC++は最適と言えるでしょう
C++で書かれた競プロの本も多いので勉強しやすいのも特徴です
Python
最近使う人が増えているのがPython
東大の授業で少しかじったので、僕はPythonで競プロをしています
Pythonは機械学習・AI、統計などで使われることが多い言語で汎用性があります
競プロ以外でも大活躍する言語と言えるでしょう
まずは挑戦してみよう
今回は競技プログラミングの紹介をしました
競プロのことを少しでも理解していただけたなら幸いです
とはいえ、実際にやってみないと分からないことも多いと思います
「競プロ 初心者」「競プロ 学習方法」などと検索すればたくさん出てくるので、それらの記事を参考にして早速競プロをはじめてみると良いでしょう
以上、アヅマでした