以下の内容はhttps://paiza.hatenablog.com/entry/2025/02/13/180000より取得しました。


【入門】C++向け競プロの練習問題サイト9選

初心者がC++で競技プログラミングを始めるときに役立つ練習問題サイト9選 -

みなさんは競技プログラミングをしたことがありますか。競技プログラミング(競プロ)とは、簡単に言うと出題されたプログラミング問題を制限時間内に解いて競い合う競技のことで、プログラミングコンテスト(プロコン)と呼ばれることもあります。

「初心者には難しそう…」と思うかもしれませんが、競技プログラミングは初心者でもゲーム感覚で挑戦できてスキルアップにもつながるため、プログラミングを勉強中の方にもオススメです。

なお、この競技プログラミングでよく使われている言語にC++があります。C++にはコードの実行速度が速い、解説などの情報が豊富といったメリットがあり、競技プログラミングで最も多く使われています。

この記事では、初心者がC++で競技プログラミングに入門するための練習サイトを9つご紹介します。


【目次】


競技プログラミングとは

競技プログラミングとは、主催から出題された問題を制限時間以内に参加者が解いて競い合う競技です。

ルールや前提条件などは、大会やサイトなどによって異なります。基本的には問題の正解数やコードの作成時間などを競い合い、制限時間は2時間程度で終わるものもあれば、1日がかりとなる場合もあります。またとにかくコードの短さを競う、コードゴルフというものもあります。

問題内容も条件分岐やループ処理などが理解できていれば解ける初心者向けのものから、Web開発やデータ分析、機械学習などといった専門知識が必要となるものまでさまざまです。

そのため自分にあったレベルの問題を選べば、初心者でも気軽に入門できてプログラミングの勉強に役立てることができます。


競技プログラミングでC++を使うメリット

すでに使い慣れた好きな言語があればそれを使うのが一番ですが、前述の通りC++は競技プログラミングで一番人気のある言語です。

競技プログラミングでC++を使うと、以下のようなメリットがあります。

実行速度が速い

C++はコンパイル言語です。コンパイル言語とは、簡単に言うとすべてのコードを一気に機械語に翻訳して一気に実行するプログラミング言語です。これに対してPythonなどのインタプリタ言語は、コードを実行する際に一行ずつ機械語に翻訳しています。

コンパイル言語はインタプリタ言語と比べて実行速度がかなり速いため、大きな大会で上位を争うような人の多くはC++を使っています。

問題の解説や書籍などの情報が豊富

前述の通りC++は実行速度が早く競技プログラミングで使っている人も多いため、問題の解説記事などが豊富に公開されています。

前述の通り使いたい特定の言語があればそれを使うのもよいのですが、競プロのサイトで解答や解説が用意されている言語は限られています。あまり使われていない言語の場合、「模範解答を見たいのにコードが公開されていない…」といったこともあり得ます。

そのため、「参考情報が多い言語に入門したい」という方にもC++はオススメです。


競技プログラミングでC++を使うデメリット

構文が難しい

プログラミング初心者にとって、C++は簡単に学びやすい・構文がわかりやすい言語とは言えない言語です。

またC++を学ぶにはC言語の知識も必要となりますが、C言語も同様に初心者にとってわかりやすい言語ではありません。そのため、学習のハードルは高いと言えるでしょう。

「プログラミング自体が未経験だから、最初は学びやすい言語がいい」という場合は、比較的わかりやすいPythonから入門してみるのもよいでしょう。競技プログラミングに慣れてきて、「もっと実行速度を速めたい」などと感じるようになってからC++に挑戦するのもオススメです。


競技プログラミング入門者にオススメのC++練習問題集

競技プログラミングに初めて挑戦する方、C++の勉強を始めたばかりの方は、paizaラーニングの「レベルアップ問題集」で以下の問題集に挑戦してみるのがオススメです。簡単な問題を解く練習をしながら、同時にプログラミングの基礎も学ぶことができます。

Dランクレベルアップメニュー

paizaでは、プログラミング問題を解くことで自分のスキルのレベルがわかる「スキルチェック問題」を公開しています。スキルチェック問題はS・A・B・C・Dのランクにわかれており、解いた結果によってS・A・B・C・D・Eという6段階のランクを取得できます。

paizaのスキルチェック

Dランクレベルアップメニューはもっとも初心者向けのDランク取得を目指すための問題集で、プログラミングの基礎的な文法を総合的に練習できます。

【問題】
文字列 paiza と learning を半角スペース区切りで出力してください。

最初は上記のような問題から始まりますので、未経験からC++で競技プログラミングを始めたい方でも無理なく入門できます。逆にスキルチェック問題でDランクを取得済みの方や、勉強がある程度進んでいる方には簡単すぎるかと思いますので、その場合は次以降にご紹介する問題集から挑戦するのがオススメです。

➜詳細を見る

条件分岐メニュー

条件分岐とは、たとえば「入力された数が奇数の場合は"YES"と表示し、偶数の場合は"NO"を表示する」など、条件を指定して実行する処理を分岐させたいときに使う制御構造です。条件分岐はC++以外の言語でも共通するプログラミングの基礎的な概念で、競技プログラミングの問題を解く際にもよく使用します。もちろん開発業務でのプログラミングでも頻繁に活用するため、早い段階で習得しておけるとよいでしょう。

【問題】
整数 A, B, C が与えられます。式 A × B ≦ C が成立している場合はYESを、そうではない場合はNOを出力してください。

条件分岐メニューではたとえば上記のような問題が出題され、if文や論理式といった条件分岐の扱い方、条件分岐を使った問題の解き方が練習できます。条件分岐を使った入門レベルの問題に挑戦したい方、条件分岐が苦手な競技プログラミング初心者の方、C++における条件分岐の理解をさらに深めたい方にオススメです。

➜詳細を見る

ループメニュー

ループとは、たとえば「指定された数値を超えるまで入力された数値を繰り返し足していく」など、特定の条件を満たすまで繰り返し処理を実行させたいときに使う制御構造です。同じ処理を何度も手作業で書くのは効率が悪くて大変ですし、コードが膨大な量になってしまうでしょう。また手作業で何度も同じコードを書いていると、どこかでミスが起きてしまうかもしれません。しかしループを使えば、処理を一度書くだけで条件を満たすまで繰り返し実行させることができるのです。

ループも条件分岐と同じくC++以外の言語でも共通するプログラミングの基礎的な概念で、実務ではもちろん競技プログラミングの問題を解く際にもよく使用します。まずはC++で問題なく使いこなせるようになることを目指しましょう。

【問題】
10 個の整数 K_1, K_2, ..., K_10 が与えられます。
これらを受け取り、改行区切りで出力してください。

ループメニューではたとえば上記のような問題が出題され、for文やwhile文などどいったループの処理を練習して、簡単なループを自分で実装できるようになります。ループを使った入門レベルの問題に挑戦したい方、ループが苦手な初心者の方、C++におけるループの理解をさらに深めたい方にオススメです。

➜詳細を見る


競技プログラミング中〜上級者にオススメのC++練習問題集

競技プログラミングには、さまざまなアルゴリズムの知識が必要となります。paizaラーニングの「レベルアップ問題集」では、各アルゴリズムを使った問題も公開してます。とくに競技プログラミング初心者にオススメの問題集をご紹介しますので、ぜひ挑戦してみてください。

定番アルゴリズムの習得

まずは競技プログラミングで使う機会の多い、探索やソートといった基礎的なアルゴリズムを練習しましょう。

探索は複数のデータの中から特定の条件に一致した値を探すとき、ソートはデータを昇順または降順に並び替えるときに使うアルゴリズムです。

【問題】
整数 n と数列 a_1, ... , a_n が与えられます。
数列を先頭から順に見たときに、最初に現れる偶数が何番目にあるかを求めてください。最初の要素 (a_1) を1番目とします。

たとえば線形探索メニューでは、上記のような問題が出題されます。このような「条件にあうデータが数列の何番目にあるか探してください」「条件にあわせてデータを並び替えてください」といった問題は、競技プログラミングでもよく出題されます。C++でも問題なく探索やソートができるようになることを目指しましょう。

初心者の場合、まずは線形探索・二部探索・挿入ソート・選択ソートといった初歩的なアルゴリズムのメニューから始めましょう。最初は入門レベルの問題から始まるので、少しずつ慣れていくことができます。学習が進んできたら、徐々に幅優先探索・深さ優先探索・マージソート・クイックソートなどといった効率的なアルゴリズムを学んでいくのがオススメです。

➜詳細を見る

定番グラフアルゴリズムの習得

グラフとは、簡単に言うといくつかの頂点とそのうち2つの頂点を結ぶ辺の集合のことです。このグラフを使った問題も競技プログラミングでは多く出題されるため、C++で習得できれば解ける問題の幅が広がります。

グラフを使う問題では、たとえば条件にあった最短経路などを探す問題がよく出題されます。ただし最短経路を探すためのアルゴリズムにはさまざまな種類があり、難易度が非常に高いものも少なくありません。

【問題】
整数 n と、n 個の文字列 s_1, s_2, ..., s_n が与えられます。
これらすべての文字列をちょうど 1 回ずつ使用して、しりとりをすることができるかどうか判定してください。

グラフ構造の入力メニューでは、たとえば上記のような問題が出題されます。初心者の場合、まずは入門としてグラフ構造の入力メニューから始めてグラフの構造を理解し、グラフの入出力や隣接行列や隣接リストの実装ができるようになることを目指しましょう。

➜詳細を見る

テキストや文字列処理の習得

文字列処理に関する問題も、競技プログラミングでよく出題される傾向にあります。

初心者の場合、まずは入門として正規表現についての理解を深めましょう。正規表現とは、簡単に言うと文字列のパターンを表現するための文字列です。たとえば'p..za'という正規表現には、文字列'paiza'や'pizza'などがあてはまります。こうした正規表現は、曖昧な文字列を検索したいときなどに活用できます。

【問題】
文字列 S が与えられるので、正規表現を用いて以下のパターンが何文字目から出現するかを求めてください。
パターン: 文字列 paiza

正規表現メニューでは、たとえば上記のような問題が出題されます。正規表現が理解できたら、次はトライ木メニューに挑戦してC++で単語の検索や削除ができるようになることを目指すとよいでしょう。

なお文字列処理では探索やソートのアルゴリズムの理解も必要となるため、並行して練習を進めるのがオススメです。

➜詳細を見る


そのほかにもC++で競技プログラミングの練習ができるサイト

AtCoder


AtCoderは日本でプログラミングコンテストを開催している有名サイトです。日本で競技プログラミングをしている人ならほとんど参加経験があるため、聞いたことがある人も多いのではないでしょうか。

「有名なサイトだから経験者向けの問題ばかりで難しいのでは」と思うかもしれませんが、「はじめての方へ」というチュートリアルページや「C++入門 AtCoder Programming Guide for beginners」というC++初心者向けの入門教材も公開されています。

そのため「C++で競プロを始めたいけど、プログラミングスキルに自信はない」「初心者だから競技プログラミングなんてまだ難しそう」という方にもオススメです。

➜詳細を見る

yukicoder


yukicoderは競技プログラミングやアルゴリズムについて、ゆるふわに練習する目的で運営されているサイトです。

競技プログラミングの模試や勉強会という位置付けのため、「最初からコンテストに挑戦するのはハードルが高い」「まずはC++で入門レベルの問題を解く練習から始めたい」という初心者の方や、「アルゴリズムの知識を強化したい」という方にもオススメです。

また問題投稿をして参加者に解いてもらうこともできるため、プログラミング問題の作成に興味がある人にも最適です。

➜詳細を見る

TopCoder


TopCoderは世界中で約60万人の人々が参加している、世界最大規模の競技プログラミングコンテストです。

TopCoderのコンテストに参加すると、プログラミングスキルを表すレーティングと呼ばれる数値が付けられます。一定以上の高いレーティングを持ち、名前が赤で表示されている人物は「レッドコーダー」と呼ばれ、世界中のエンジニアたちの中でも一目置かれる存在となります。

初心者でも英語がOKな方なら挑戦可能かと思いますが、「多少のプログラミング経験はあるので、難しい問題をC++で解く練習がしたい」といった方にはよりオススメです。

➜詳細を見る


C++で競技プログラミングに入門してみよう

C++や競技プログラミングに対して「ハードルが高そう」と感じていた方もいるかと思いますが、最近では初心者向けのコンテストも多く開催されています。

一人で黙々とプログラミングの勉強をしているだけでは、モチベーションが保てないこともあるでしょう。ほかの挑戦者と一緒に「いかに素早く的確なコードが書けるか」を追い求める競技プログラミングは、楽しく飽きずに挑戦できるため、スキルアップを目指す初心者にも適しています。C++初心者の方も、まずはここまでご紹介してきた入門レベルの練習問題から始めてみてください。

なお「Pythonで競技プログラミングを始めたい」という方には、以下の記事がオススメです。

paiza.hatenablog.com

また「Pythonの学習をこれから始めたい」という方には、以下の記事がオススメです。

paiza.hatenablog.com





paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング




以上の内容はhttps://paiza.hatenablog.com/entry/2025/02/13/180000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14