seiのエンジニア成長記

AtCoderの始め方【おすすめの言語も紹介します】

atcoder
AtCoderの始め方【おすすめの言語も紹介します】

こんばんは! seiです!

 

  • AtCoder興味あるけど始め方が知りたい!
  • ついでにおすすめの言語とか知りたい!
  • AtCoderの仕組みがざっくり知りたい!

 

今回はそんなお悩みにお答えします!

 

この記事の信頼性

僕はAtCoderを始めて3ヵ月です。大体コンテストのC問題までは安定して解けるようになりました。

 

atcoderとは?

AtCoderは、オンラインで競技プログラミングができるプラットフォームの一つです。

競技プログラミングとは? プログラミングを用いて数学的な問題をいかに早く、正確に解けるかを競うものです。

初心者から上級者まで、様々なレベルの問題があります。AtCoderを通じて、プログラミングスキルを試したり、伸ばしたりすることができます。

 

早速AtCoderにログインしよう!

以下のURLにアクセスして右上の「新規登録」から新規登録をします。

[blogcard url=https://atcoder.jp/?lang=ja\]

 

ログインしたら、上のメニューの**「コンテスト」を選択して、「コンテスト一覧」をクリック**してみましょう。

 

常設中のコンテストの中に**「AtCoder Beginners Selection」があるのでクリック**しましょう。

 

AtCoder Beginners Selectionとは? 簡単に言うと初心者向け問題集です。AtCoderになれるために、全問解くのがおすすめです!

一問一緒に解いてみましょう

問題はこちら↓

https://atcoder.jp/contests/abs/tasks/abc086_a

 

a×bが奇数か偶数か判定するだけですね。

 

上の方を見てみましょう。 実行制限時間とメモリが記載されてあります。

書いたプログラムが処理を実行する時間は2秒まで、メモリは256MBまでという意味です。 2秒以上かかったり、メモリを256MB以上使ったりすると出力が正解でも、不合格となります。

 

 

下のほうに行くと、「ソースコード」があります。 ここに答えのコードを記入します。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a, b;
    cin >> a >> b;

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

    return 0;
}

 

今回は上記のようなコードを書きました。終わったので提出してみます。

ちゃんと**合格すると「AC」**となって結果が分かります。

 

不合格も確認してみよう

では、あえて不合格のコードを書いてみます。

// cout << "Odd" << endl;
cout << "Even" << endl;

先ほどのOddの部分をEvenに変えてみましょう。

しっかりと**「WA」(wrong answer)になりました!** こんな感じで間違ってたら教えてくれます。

教えてくれるんですが、コンテストではWAなどAC以外のものを提出するとペナルティが発生します。 点数が下がってしまうのでなるべく一発で通るようにしたほうが良いです。

 

そんなあなたにテスト機能があります

一発勝負は危険なので、AtCoderには標準でテスト機能があります。 コンテストではテスト機能を使いましょう。**ソースコードに「自分のコード」、標準入力には「入力例」**を記入して実行しましょう。

きちんとEvenと表示されました!

ただ、このテスト機能はめちゃ使いづらいです!

最初から用意してくれているのはありがたいんですが、このテスト機能めちゃ使いづらいです。

「atcoder-cli」と「online-judge-tools」を使おう

便利なツールがあるので、こちらを使うことをお勧めします。 コードの自動テストがvscode上でできてしまいます!

詳しくは以下の記事をどうぞ↓

[sitecard subtitle=関連記事 url=https://seiseiengineering.com/atcoder%e3%81%aec%e7%92%b0%e5%a2%83%e6%a7%8b%e7%af%89-vscodewsl2%e3%81%a7%e5%bf%ab%e9%81%a9%e3%81%ab%ef%bc%81/ target=]

 

競技プログラミングにおすすめの言語

 

競技プログラミングにおすすめの言語はC++です。 もし仮にプログラミング初心者で、今から始めるなら絶対にC++を選んでください!

僕は半年間Go言語で通り組んでいました

マジで苦行なのでおすすめしません(笑) 解説はC++が多いです。時間に余裕がある学生ならまだいいですが、社会人はC++にしましょう。

C++を選ぶべき理由は以下です。

  • AtCoderで最も使われている
  • 公式解説もC++で行われる
  • 標準ライブラリが豊富

AtCoderで最も使われている

C++はAtCoderで最も使用されている言語です。AtCoderでは他人の提出したコードを見ることができます。 最も多く使われているということは**、提出されたコードも最も多く、参考にできるコードがたくさん見つか**るということです。

初心者にとっては競プロ上級者が書いたコードは理解しにくいです。 C++を選べば、自分に合ったレベルの参考コードを見つけられます。

 

公式解説もC++で行われる

AtCoderでは公式の問題解説がありますが、C++で書かれています。他の言語の解説が書かれていて、C++の解説コードが書かれていない場合は見たことがないです。

公式解説を参考にするのであれば、C++で抱えれているコードをいちいち理解しなおして、自分の使用している言語に変換する必要があります。 どうせC++を解読しないといけないなら、最初からC++で取り組みましょう!

 

標準ライブラリが豊富

C++の標準ライブラリはAtCoderの問題を解くためのライブラリがめちゃ充実してます。例えば、データ構造(vectorやsetなど)、数学関数、ソートや二分探索などですね。 他の言語だと標準でライブラリがなくて、自分で実装しないといけないときがあります。

難しい問題になればなるほど、これらのライブラリの使用頻度が高くなってくるので、きつくなります。 上位を目指したいのであればC++一択です。

 

他の言語がどうしても使いたいです

Pythonがおすすめです

「俺はC++が嫌いだ!絶対に使わん!」 という頑固ちゃんなあなたにはPythonがおすすめです。

二番目に提出量が多く、ライブラリが充実しています。

 

AtCoder3か月目までの勉強方法

 

AtCoderむずくね?と思った方、安心してください僕も最初は全然解けなかったです。

AtCoderの問題を解くには、計算量とアルゴリズムの知識が必要です! 高校の時の数学と同じですね。「知ってれば解ける」けど「知らないと天才じゃないと解けん!」。

計算量を学習しよう

計算量を学ぶには以下の記事がおすすめです。 AtCoderでは大体10の8乗くらいまでが実行時間ギリギリです。

[sitecard subtitle=おすすめ記事 url=https://seiseiengineering.com/%e3%80%90atcoder%e5%88%9d%e5%bf%83%e8%80%85%e5%bf%85%e8%a6%8b%e3%80%91atcoder%e8%a8%88%e7%ae%97%e9%87%8f%ef%bc%88%e3%82%aa%e3%83%bc%e3%83%80%e3%83%bc%ef%bc%89%e3%81%ae%e7%9b%ae%e5%ae%89/ target=]

アルゴリズムを学習しよう

僕が3か月間で学んだアルゴリズムは以下です。

  • 全探索(順列全探索、ビット全探索)
  • BFS(幅優先探索)
  • DFS(深さ優先探索)
  • DP(動的計画法)

 

初心者は全探索から始めることをおすすめします! 「全探索なんて全部調べるだけやろ?」

ところがどっこい! 意外と奥が深くて、全部調べるだけでも効率の良い調べ方があります! 「bit全探索」や「順列全探索」で調べてみてください!

 

bit全探索を用いた問題の解説↓ [sitecard subtitle=関連記事 url=https://seiseiengineering.com/c-switches%e8%a7%a3%e8%aa%ac-atcoder-beginner-contest-128%e8%a7%a3%e3%81%84%e3%81%a6%e3%81%bf%e3%81%9f%ef%bc%81%e3%80%80%e3%80%90atcoder16%e6%97%a5%e7%9b%ae%e3%80%91/ target=]

順列全探索を用いた問題の解説↓

[sitecard subtitle=関連記事 url=https://seiseiengineering.com/c-average-length%e8%a7%a3%e8%aa%ac%e3%80%80%e3%80%90atcoder17%e6%97%a5%e7%9b%ae%e3%80%91/ target=]

 

僕もまだまだ習熟度は足りませんが、これからどんどんコンテストに参加していこうと思います!

 

まとめ

今回はAtCoderの始め方を解説しました!

「エンジニアに競技プログラミングは必要ない」という意見もありますが、ある程度のアルゴリズムの知識があったほうが良いなと思います。

リソース(メモリ)と計算量を意識してコーディングできた方が絶対良いですよね?

皆さんも楽しいAtCoderライフを送ってください☻