競プロ強者になりたい
なりたくないですか?
競プロって何?
競技プログラミング、略して競プロをご存じでしょうか。
「Hello, Worldという文字列を10回繰り返して表示するプログラムを書いて提出せよ」
「変数aおよびbが整数型で与えられる。このとき、a + bの答えを表示するプログラムを書いて提出せよ」
というような、プログラミングやアルゴリズムに関する問題が出されるので、任意の言語でコードを書き、提出し、テストケース(2問目であればマイナスの数を代入してもちゃんと計算できるか等)をクリアすれば点がもらえるという競技です。
競技と名前がついていますが、試験のように○月○日×時から、と実際に時間を区切って行われる本格的なオンラインコンテストから、好きなときに問題を解いて気楽にチャレンジできるサイトまで様々あります。
最近はメジャーな競技になりつつあり、大きなコンテストで高得点を取ることができればプログラマとして高待遇のスカウトが来る仕組みも存在します。
…と大きな夢を持つのも楽しいのですが、プログラマであれば押さえておきたい基本的なアルゴリズムが多く出題されるため、競プロの勉強をしておくだけでも腕は上がり、速く正確なプログラミングができるようになるでしょう。
最短最速で強くなりたい
コンテストでは現在の自分が全参加者の中でどれくらい強いかという数値がレートとして算出されます。参加した回の出来によって上がったり下がったりします。
レートは帯域によって色付けされており、灰色から始まって最高位は赤、通称レッドコーダーと呼ばれ、上位0.2%とも呼ばれるトップ層はツワモノ揃いです。
そんな競プロを気軽に始めるには何から始めればよいのでしょうか。
①使用する言語を決める
使用する言語を決めましょう。
PythonやJavaなど、既に馴染みのある言語があればそれで挑むのもよいでしょう。
しかし、CやC++は実行時間が非常に高速であり、競プロでは実行時間の短さも評価対象になるため、今馴染みのある言語が特にないという人はこれを機にC++を学習してみるのもよいのではないでしょうか。
個人的には、CやC++と同程度に高速と言われているRustが気になっており、AtCoderという大手プログラミングコンテストサイトではRustでも挑戦することが可能であるため、Rustで競プロに挑んでみたいと思っています。Rustは非常に難しいそうですが…
②アルゴリズムを学ぶ
アルゴリズムとは、ものすごく大雑把に言うと『計算のやり方』です。
有名なアルゴリズムとしては、ソートアルゴリズムと呼ばれる、雑多に並んだものを数の大きいものから小さいもの順(あるいは小さいものから大きいものの順)に並べる方法があります。
昔から色んな方法が考えられてきて、効率が悪いものから条件によっては最速といわれるものまで様々あります。
ソートアルゴリズム以外にもプログラミングに使えるアルゴリズムはたくさんあり、これらを知っておくとかなり効率のよいプログラムが書けるのではと思います。
最近プログラミング界隈で話題の書。とてもわかりやすくまとまっています。
https://www.amazon.co.jp/dp/4297125218/ref=cm_sw_r_tw_dp_N4MQ7WH6QFVGTST62PN5www.amazon.co.jp
競プロをやるならこの本と呼ばれる鉄板の本。通称『蟻本』
https://www.amazon.co.jp/dp/B00CY9256C/ref=cm_sw_r_tw_dp_15J913CV1W7DBTT9EYVYwww.amazon.co.jp
プログラミングに数学が必要という意見は、こういったアルゴリズムの考え方が多少なりとも必要という点から来ているのだと思います。
③手を動かす
基本を学んだところで、実際に問題を解いてみましょう。
まずは時間制限がなく、いつでも試せて問題が豊富なAIZU ONLINE JUDGESがおすすめです。
(デフォルトでは英語表記ですが、日本語切り替えがあるので安心)
他の人の書いたコードも見ることができるので、大変勉強になります。
④コンテストで腕試し
自信がついてきたなと思ったら!オンラインコンテストに参加してみましょう。
日本ではAtCoderが今のところ一番有名で活発なサイトかと思います。日本発のサイトなので日本語にもバッチリ対応しているところがいいですね。
AtCoderでは初級者向けのABC(Atcoder Beginner Contest)から上級者まで楽しめるAGC(Atcoder Grand Contest)まで毎週末何かしらのコンテストが開かれており、たまに企業が主催しているネームドコンテストもあります。
ゆっくり楽しむ?それとも極める?
「〇〇という言語をちょっと触ってみたいな」
「プログラミング力をもっと上げたい!」
そんな思いから一歩踏み出すとっかかりとして、競技プログラミングに触れてみるのも良いと思います。
競プロはやり始めたら高レートを目指さなければならない、というわけではありません。
個々人で楽しめるペースで始めましょう。
Have a nice programming✨
参考になるページ
レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【初級編:競プロを始めよう】 - Qiita
紹介した『「アルゴリズム×数学」が基礎からしっかり身につく本』著者の方の記事です。
この記事を書かれた時点で高校生でレッドコーダー、現在は大学生だそうですが、大学生で書籍を出版してベストセラーというすごい方です…
PR
株式会社スマレジTechFarm事業部ではWebエンジニアを募集中です!
PythonやRustなど最新の言語の案件も多数あり、未経験含む様々なご経験をお持ちの方にご活躍いただける会社です。 こちらのフォームからエントリーしていただき、就職が決まれば10万円を進呈中です! カジュアル面談も随時受付中です。どうぞお気軽にエントリーください。 (「ゲネのブログを見た」とおっしゃっていただければ嬉しいです。