競技プログラミングとは? メリットや取り組みのポイント

はじめに

メンバーズエッジカンパニーの田邉です。
1年ほど前から競技プログラミングをはじめました。
今回は私の感想を交えて競技プログラミングについて紹介したいと思います。

競技プログラミングとは

競技プログラミングを簡単に説明すると「与えられた課題の解決プログラムを制限時間内に作る競技」です。
課題は「2つの数字の和を計算する」といった簡単なものから「電車を乗り継いで移動した時の最短時間を求める」のように複雑なものまで様々なものが出題されます。
回答として課題解決プログラムのソースコードを提出し、提出までの早さやプログラムの正確さなどで成績が決まります。

参加の流れ

競技プログラミングへの参加がイメージしやすいよう、私が普段利用しているAtCoderを例に説明します。
AtCoderは競技プログラミングに特化したWebサービスで、毎週土日の夜に競技プログラミングのコンテストが開催されています。
コンテストは以下の流れで開催されます。

  1. 開催日時公開
  2. コンテスト開始〜終了
  3. 解説公開

1. 開催日時公開

数日前に開催日時が公開され、それと同時に参加を申し込むことができます。
申し込みと言ってもボタンを押すだけなので簡単です。
申し込みをしたらコンテストが始まるまでに色々と準備をしておきましょう。
開発環境を整えたり、新しいアルゴリズムを覚えたり、自分用のライブラリを整えたり。
どんな準備をするかは人によって違いが出てくるところかもしれません。

2. コンテスト開始〜終了

開始時間になると問題が公開されるので、時間内にどんどん解いて回答を提出します。
提出すると自動で採点されるのでたくさん正解できるよう頑張りましょう。
1回のコンテストで複数の問題が出題されるので、解けそうにない問題は諦めることも有効です。
このあたりは学校の試験などと似ていますね。

3. 解説公開

コンテストが終わると各問題の解説が公開されます。
コンテスト後でも回答は提出できるので、余力があれば解説を見ながら正解を目指すことをおすすめします。

競技プログラミングに挑戦した感想

競技プログラミングに挑戦してみたところ、次のようなメリットを感じました。

  • 問題の解き方を考えるのが楽しい
  • アルゴリズムやデータ構造について詳しくなれる
  • 計算量を意識する練習になる
  • 新しい言語に挑戦する時の練習問題として最適

ただ良いことばかりではなく、気になる点もいくつかありました。

  • ソフトウェア開発では様々な知識が必要になるが、競技プログラミングで身につく知識は一部だけ(主にアルゴリズムやデータ構造)
  • 1人で挑戦しているとモチベーション維持が難しい(特に成績が伸び悩んだ時)
  • 人を選ぶところがありますが、数学やパズル、競争が好きな人に向いていると思います。

社内での活動内容

メンバーズには好きなテーマで学習サークルを作れる制度があり、その制度を利用して競技プログラミングに興味がある人が集まって活動しています。
参加メンバーは、AtCoderのコンテストに参加して週明けにチャットで感想を共有しあっています。
参加は強制ではなく自由なので自分のペースで参加できるのが気に入っています。
前述の通り1人だとモチベーション維持が難しいですが、仲間がいることでモチベーションが維持できているように思います。

終わりに

簡単にでしたが、競技プログラミングについて紹介しました。
プログラミングについての学習が続かないなと思っている方は一度挑戦してみてはいかがでしょうか。

この記事を書いた人

田邉 圭一

田邉 圭一

2019年中途入社。メンバーズエッジ所属で熊本出身のWebエンジニア。最近は業務でGo言語、プライベートでRustを使ってプログラミングすることが多め。謎解きイベントに参加するのが好き。

おすすめ記事

タグ

2020新卒バトンAdobe IllustratorBIツールBOTCCDLab.CSSCSV事例DockerDXECExcelExcel関数GitGoogleAnalyticsGoogleスプレッドシートGoogleデータポータルLT会MembersDinerOJTPhotoshopPythonRubySDGsSEOSimilarWebSlackSNSSocial Art JapanプロジェクトSQLUIUXUXリサーチVSCodeWebディレクションWebディレクターWebマーケティングWeb解析Well-beingWordPressアクセシビリティアナリティクスウェビナーウェビナー運用エシカルエシカルファッションエンジニアオウンドメディアオンラインイベントお悩み相談室キャリアクライアントワークコーディングコミュニケーションコンテンツマーケティングコンペサービスサイト構造サステイナブルサンプルスウェーデンスキルアップセミナーソーシャルアーティストソーシャルクリエイターチームビルディングツールデータディレクションディレクターデザイナーデザインデンマークトンマナナレッジブームの裏側フレームワークプログラミングプログラミング教育フロントエンドマーケティングマネジメントスキルミーティングメタバースメンバーズメディカルマーケティングカンパニーメンバーズルーツカンパニーユーザーテストライティングラボ活動リモートワークショップワークスタイル事例事例紹介仕事術仙台仙台オフィス分析効率化勉強会動画北欧医療業界品質管理地方金融企業基本情報技術者試験広告運用提案数学新卒研修新規構築機械学習気候変動海洋プラスチック問題生産性向上産学連携研修社会課題社会課題調査競技プログラミング脱炭素自動化ツール色彩検定製薬業界試験対策資格開発環境障がい者雇用食の問題