0から始める競技プログラミング~ちょっとだけわかるAtCoder~
2022-12-21
azblob://2022/12/19/eyecatch/2022-12-21-atcoder-tutorial-000.jpg

こちらの記事は「FIXER Rookies Advent Calendar 2022」21日目の記事です。

こんにちは村上です。気づけばもう年末ですね…

冬は室内で過ごすことが多いと思いますが意外と暇だったりしませんか?

そんなあなたに室内でできる勉強と趣味を兼ね備えたコンテンツを紹介します。

ということで、今回紹介するのは「AtCoder」です。

・AtCoderとは

AtCoder
AtCoder トップページ

AtCoderはある問いに対して効率の良いアルゴリズムを導きプログラミングを用いて解く競技プログラミングを世界規模で開催しているサイトです。

多くのユーザが登録しており、リアルタイムで問題を解き書く速度と正確さを競うコンテストで切磋琢磨しています。

AtCoderのメリットとして以下の点が挙げられます。

・メールアドレスだけで登録が可能

・Wed上にコンパイラがあるので手元のパソコンの環境のセットアップが必須ではない(VSCodeなどがあると便利ではありますが最初はメモ帳で十分です)

・プログラミングに触れる機会を提供してくれる

・多くの言語に対応している(処理速度の関係で言語間に有利不利はあります)

・上述の通り多くのユーザがいるため競い合うことができる

・楽しい!(めっちゃ重要です!)

・AtCoderの始め方/使い方

まず新規登録をします。AtCoderを開いて画面上部にある新規登録をクリックし必要事項を入力し利用規約を確認して新規登録を押すだけです。簡単ですね。

AtCoder新規登録

AtCoder新規登録画面

次にAtCoderのチュートリアルを確認しましょう。

まずプログラミングを触ったことのない方はC++入門 AtCoder Programming Guide for beginners (APG4b)をやってみましょう。

こちらは初めての方~初心者を対象としてC++を親切丁寧に教えてくれる教材です。プログラムの説明の後に練習問題がセットでついており実践力も付きます。

競技プログラミングではなく他のことをするためにプログラミングを学びたい方にもお勧めです。1つ言語を会得すると他の言語を学ぶときにノウハウが活きて会得がスムーズになります。

APG4b

次にAPG4bで学ぶ知識がある程度身に付いた方、またはもう身に付いている方はAtCoder Beginners Selectionにある問題を一通りやってみましょう。

こちらは初心者向け問題集になっていて競技プログラミングの問題の傾向を掴みつつ、AtCoderの操作を学ぶことができます。

こちらの問題集から1問解いてみたいと思います。

ABC086A - Product
ABC086A - Product

このように競技プログラミングの問題は問題文と入力とその制約、出されるべき出力が書かれています。そして入力例と出力例が2~3つ示されます。

この問題の要件を満たすようにコードを書いていきます。今回はAPG4bで学んだかつ処理速度が速く競技プログラミングで有利なC++で記述します。

といっても今回は単純な問題なので入力を受け付けるために変数を2つ宣言してcinで入力を受け取りその積の余りで出力を分岐するだけですね。

こんな感じのコードになると思います。

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    if (a * b % 2 == 0) cout << "Even" << endl;
    else cout << "Odd" << endl;
}

コードが完成したらページの下の方にソースコードを記述する場所があるのでそこに記述します。

source code

そして提出結果を確認しACが出たら正解です!おめでとうございます!

Result AC

下のようなエラーが出たらそれに対応してもう一度チャレンジしましょう。

Jedge

このような流れで問題を解いていきます。

チュートリアルが終わったらぜひコンテストに参加してみましょう!

初心者向けのコンテストAtCoder Beginner Contest(ABC)が大体毎週土曜日の21時に開催されています。

ABCは100分間に6問の問題が出題され、解く速度と正確さ(エラーを出すと結果に5分加算されます)を競います。ランキングも出て自分の成長を感じることができるイベントです。ぜひ参加してみてください!

また、コンテストがない時に練習したい場合はAtCoder Problemsから過去問を解けるのでぜひチャレンジしてみてください。

・終わりに

AtCoderは趣味でもガチでもどんな人でも競技プログラミングを学び、競い合うことができます。

是非AtCoderを通じて競技プログラミングに触れてみてください。私も久々にやりたいと思います。