競技プログラミング、競プロという言葉を聞いたことがあるでしょうか。
最近では日本だけでなく世界でも認知されつつあるこのワード。本記事では、競技プログラミングについて詳しく解説していきます!
競技プログラミングとは?
競技プログラミングとは、与えられた課題を参加者がプログラミングで解決する競技のことです。主に、プログラムの作成時間やプログラムの性能を競い合います。2時間程度で終わるものや1日かけて競い合うもの、競技内容もさまざまです。
ジャンルも幅広く、ゲーム、AIやセキュリティ、データマイニングなど複数のジャンルがあり、得意なものやこれから学びたいジャンルを選択するのが一般的です。
競技プログラミングは、基本的に正解数の多い人が勝ちますが、正解の数が同じ場合、解いたスピードの早い人が勝ちになることが多いです。現在、世界中でeスポーツが注目されていることはご存知でしょう。競技プログラミングはeスポーツと似ていると言われることもしばしばあります。
競技プログラミングの魅力
「競い合うメリットはあるの?」と思われる方も多いでしょう。競技プログラミングにはたくさんの魅力があります。
楽しくプログラミングを学べる
インターネットの普及やスマホの登場にともなって、アプリ開発をする人が増えました。すると自然と、プログラミングの認知が広まり、稼ぐ目的でアプリ開発をする人やIT企業に就職するためにプログラミングを覚える人が急増したのです。しかし、当時は独学で覚えるのが一般的でした。プログラミングスクールはとても少なく、本やインターネットが学びの頼りだったのです。
令和に入り、プログラミングスクールに通う人を当たり前のように見かけます。学ぶ人が増え、学ぶ場が増えて、そのような流れで競技プログラミングというコンテストも開かれるようになったのです。自分に合った方法でプログラミングを学べる、そして競技プログラミングというゲーム的な要素を含む方法で「楽しく学べるようになった」、それが競技プログラミングではないでしょうか。
好成績を残せたら、達成感を得ることができるでしょう。また、プログラミングを学ぶためのモチベーションにも繋がります。本に書かれた文字と睨めっこする、そのような辛い方法で勉強しなくてもスキルアップができるのです。
プログラミングスキルが早く身に付く
競技プログラミングでは、問題文が出題されてそれを解答し、正しく動いたかを確認することができます。
①問題文を読む ⇒ ②解く ⇒ ③答えを知り学ぶ
上記の流れを繰り返し行うことで、自然にプログラミングスキルが身に付くでしょう。有名な競技プログラミングサイトにAtCoderというものがありますが、答えだけでなく、実行時間やコードの長さもチェックできます。正解・不正解だけでなく、自分のコードをより短くシンプルにするためにはどうすればいいのかを考えることもできるので、コードの精度も高められるでしょう。
仕事のオファーが舞い込むことも
ニコニコ動画配信サイトを運営するドワンゴは、2018年に「ドワンゴの挑戦状」というプログラミングコンテストを開催しました。採用に繋がるプログラミングコンテストとしてエンジニアを目指す人の中で話題となったコンテストです。
また、Googleでは「Google Code Jam」というプログラミングコンテストを開催しています。もし、入賞することができれば、プログラマーとして注目されることは間違いないでしょう。
日本国内外から注目されるコンテストで活躍すると、仕事のオファーが舞い込む可能性もあります。また、企業が開催するコンテストで入賞すれば、一流企業に就職できるチャンスも生まれるので、自分のキャリアアップに繋げられるでしょう。
例題と解答の流れ
こんな問題が出題されます。(競技プログラミングといっても、さまざまなタイプのコンテスト・問題があります。あくまで一例としてご覧ください。)
競技プログラミングの問題例
解答のステップ
解答のステップとしては、以下のような感じでしょうか。
- 問題内容を理解する
- アウトプットに必要な解法を検討する
- コーディングにより解法を実現する(※標準入出力慣れてない人は注意)
問題のレベルが上がると?
問題のレベルが上がれば上がるほど、1~3の各ステップで求められる能力・技術のレベルも高くなります。
問題を読み解くのに時間がかかったり、読み間違えたり、解法が思いつかなかったり、思いついた解法をどうコーディングすればいいか分からなかったりといったことが起きるわけです。さらに、コンテストや問題によってはプログラムの実行速度が重要視され、正しく出力できるプログラムであっても実行速度が遅すぎて不正解とされるものもあります。
競技プログラミングならではの特徴(標準入力と標準出力)
上述した問題例も当てはまりますが、競技プログラミングでは、問題を解くために「値を入力する」、解答を提出するために「値を出力する」ことが必要になるケースが多々あります。これをそれぞれ標準入力、標準出力と呼び、競技プログラミングを始めるうえでの作法のようなものといえるでしょう。
競技プログラミングにおすすめの言語5選
競技プログラミングでは使用する言語も重要になってきます。以下では一般的に多く使われる5種類のプログラミング言語について紹介します。
- C++
- Python
- Java
- C#
- JavaScript
C++
競技プログラミングで上位入賞を狙うならC++がおすすめです。他のプログラミング言語に比べて実行速度が早いからです。
コンテストの中には、実行時間が遅いと正解と認められないケースもあります。特に、Pythonなど実行速度が遅い言語を選択すると解けない問題も少なくありません。そのため、C++を選択したほうが有利というわけです。
しかし、C++は簡単な言語ではありません。C言語の上位互換言語になりますので、C言語を習得していない人がC++を選択すると学習に苦労します。そのため、初心者にはハードルが高い言語です。
Python
先ほど、実行速度が遅いと言いましたが、Pythonも競技プログラミングにおすすめの言語として上位にランクインするのではないでしょうか。その理由は、学習のしやすさです。
コードがシンプルで習得しやすく、アメリカでは学習言語として用いられます。また、日本でも人工知能などの開発に使われており、注目を集める言語のひとつです。
Java
競技プログラミングで多く使われる言語のひとつです。C++よりも速度が少し劣る程度で実行速度が早いことで知られています。Javaを覚えることで、オブジェクト指向の考え方などを学ぶことが可能です。また、メソッドが利用できることも魅力のひとつになるでしょう。
C#
Windowsアプリ開発やUnityを使った開発に用いられます。書き方はJavaに非常に類似する点が多いです。C言語のようにポインターなどの概念はないので、初心者でも学習しやすいでしょう。
JavaScript
フロントエンド開発で使われる言語です。また、Node.jsによりサーバーサイド開発にも用いられるようになりました。C#と同様に、Javaの書き方に似ている点が多いです。
C++やJavaよりもスピードは遅めですが、定期的なアップデートによりPythonよりも実行速度が早くなったと言われています。
有名な競技プログラミングサイト4選
AtCoder.jp
毎週末の夜に開催される、日本語を使って参加できる世界最高峰の競技プログラミングサイトです。過去問が解説付きで公開されているのもとてもありがたいですね。日本語で参加できて、日本語で解説してくれるサービスがあるということは、英語が苦手な人が競技プログラミングを志すうえでとてもラッキーな環境です。しかも無料!AtCoderさん、ありがとう!
パナソニックプログラミングコンテストや日立製作所 社会システム事業部プログラミングコンテストなど、日本を代表する一流企業により主催されるコンテストもあります。
TopCoder
世界的な競技プログラミングコンテストです。世界中で約60万人が参加しています。
コンテストに参加するとプログラミングスキルを表す数値がレーティングで表現されます。最もスキルが高いことを示すレッドコーダーになれば、技術力の高さを全世界にアピールすることができるでしょう。ただし、日本語対応していないのが日本人としてはつらいところです。
HackerRank
URL:https://www.hackerrank.com/
開発者と企業をマッチングすることを主眼に置いたプログラミングサイトです。
いつでもチャレンジできる問題に加え、プログラミングコンテストも定期的に開催されています。問題を解き進めて企業からのオファーをゲットするチャンスもあるよというコンセプトのようですね。こちらのサイトも日本語対応していません(><。
Google Code Jam
URL:https://codingcompetitions.withgoogle.com/codejam
Googleが主催する年1回のプログラミングコンテストです。知名度が高く、上位に入賞すればエンジニアとして一目置かれる存在になります。
さいごに
エンジニアはスキルが求められる職業です。スキルを高めて自身のレベルを証明できれば、活躍の場が増えることでしょう。
競技プログラミングは自身の実力を高める学習の場であり、自分の実力を示すキャリアアップの機会にもなります。興味のある方は一度参加してみることをおすすめします。
- カテゴリ: