#はじめに
GoogleColab(もしくは何かしらの開発環境)、AtCoderのアカウント等が準備出来ている人向けです。準備が出来てない人はPart1を見ましょう。
この記事ではチュートリアルと簡単な問題を一つ解きます。学校の授業でプログラミングはちょっとやったけど・・という人やプログラミングちょっと触ったことあるだけの初心者等向けで書いてます。普通にアプリとか作ってる人は問題の解き方の説明は無駄だと思います・・多分。そういう人はささっと読み流しちゃってください。
また、過去問をやっていく上で便利AtCoder Problemsというサイトがあるのでその使い方も紹介しています。
#やること
- AtCoderのアカウント登録する ←Part1
- GoogleColabを使ってみる ←Part1
- AtCoderの問題を解こう ←この記事
- AtCoder Problemsを使ってみる ←この記事
#問題を解こう
さて、手元に開発環境が無かった人がGoogleColabが使えるようになったら、AtCoderの問題を見てみましょう。
過去問は現時点(2020/06/24)でABC(AtCoder Beginner Contest)だけでも171回開催されているためすごくたくさんあります。
まずは、 [AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~]
(https://qiita.com/drken/items/fd4e5e3630d0f5859067) をまとめた
AtCoder Beginners Selection というものがあるのでやってみます。
リンク先に移動したらこんな画面が表示されるので、参加登録をクリックします。
その後、上部に表示されている[問題]をクリックします
下の方はプログラミング初心者には難しいと思うのでとりあえず一番上のチュートリアルをやってみましょう。
##PracticeA - Welcome to AtCoder
問題リンク:Welcome to AtCoder
この問題はAtCoderのチュートリアル的問題です。
解答が分からない人は問題中に各言語での例が載ってるのでそれを参考にしましょう。
まず問題と制約を読みます。制約は絶対守られる範囲なのでこれ以外の場合などの例外処理は書かなくて良いです。
コードが思い浮かびそうなら解答をGoogleColabに書いて、それをコピペしてAtCoderに貼り付けて回答します。
ちなみにColabに標準入力する際には1行ずつ入力します。ちょっと面倒ですね・・
(こんな記事を見つけたのでちょっと楽したい人はどうぞ)
こんな感じで何回か実行してみて「お、行けるな」と思ったらAtCoderの解答欄(問題ページの最下部にあります)に移動して
言語を間違えないように使う言語(今回はPython (3.8.2)
)を選択します。
本番で言語選ぶの忘れてペナルティなんてことはちょいちょい見るので注意しましょう。
準備は出来ましたか?次に[提出]を押します。
するとこのようなページに飛びます。結果の所がジャッジ待ちになっていると思いますが数秒~数十秒待てば緑のACという表記になると思います。コピペか言語の選択などでミスっていた場合(つまり解答が違う場合)オレンジ色でWAという表記になります。
##ABC086A - Product
問題リンク:ABC086A - Product
次に2問目のABC086A - Productを解いてみます。
ちなみに、頭のXXXYYYZ
のXはコンテスト名、Yは回数、Zは問題です。(今回はABC-第86回のA問題ということです。コンテスト自体はABC086のように文字と数字で表されることが非常に多くあります。覚えておきましょう。)
問題文
シカのAtCoDeerくんは二つの正整数a,bを見つけました。aとbの積が偶数か奇数か判定してください。
制約
1 ≦ a,b ≦ 10000
a,bは整数
多分プログラミング出来るならこれぐらいはパパっと書ける人が多いと思いますが順序立てて考えてみましょう。
- とりあえずaとbを受け取る(数値で)
- aとbの積を計算する
- その積が奇数か偶数どうか判定する
- 2で割って余りが1あれば奇数、0なら偶数で良さそう。
- 判定した結果を出力する
だいたいこんな感じでしょうか。こんな感じでやることを一旦考えてから書き始めるとやりやすいです。まぁこのぐらいの問題なら気にせず書いてもいいと思います。
実際にColabにコードに書いてみます。書いたら再生ボタンを押してデバッグしてみましょう。
こんな感じで書いて何回か試して良さそうだったら先程と同じ手順で提出してみます。
AC出来ましたか?次は一旦ABSから離れて過去問を見てみようと思います。(ABC086Aも過去問ですが)
#AtCoder Problemsについて
AtCoder ProblemsはAtCoderの過去問へのリンクをまとめてくれている便利なサイトです。
他にも過去問をまとめているサイトはありますが私がよく使うのでAtCoder Problemsについて説明しときます。
このサイトはユーザを指定すればその人の解いた問題に色をつけたりしてくれます。自分を指定すれば解いてない問題が一発でわかるということですね。
ちなみにログイン不要ですがログインするとバーチャルコンテスト(バチャコン)を開催できたりします。
使い方は簡単で過去問を解く際は基本的に画面上部の[Problems]を選択した画面を使うことになると思います。
Table,List,Userの3つの表示があり、
コンテストごとの一覧、問題の一覧、ユーザの分析みたいな感じです。
それぞれ紹介していきます。
###Table表示
左上のUserに自分のIDを入力すると過去問を解いていればこのように色が緑になります。オレンジだと間違った問題ですね。
コンテスト単位や「C問題を解きたい」といった時に便利だと思います。
###List表示
List表示ではPointやDiffcultyで問題にフィルターをかけたり出来ます。Pointはその問題に割り当てられた点数で、Diffcultyはそのレートの人が50%で解ける という値です。コンテストにある程度参加すると自分のレートがわかってくると思うので結構参考になります。
Diffculty Statusの数字の所をクリックするとDiffcultyがその範囲の問題に絞られます。
その状態で表の上にあるDiffculty欄の見出しをクリックするとソートしたり出来ます。
もう少し細かいフィルターが欲しい場合はProblem Listの文字の真下にある所からいじってください。
問題はProblem欄の問題名をクリックすると飛びます。Contest欄のコンテスト名をクリックするとそのコンテストのトップに飛びます。
表のSolvers欄はその問題を解いた人数が表示されて、Diffculty欄はその問題のDiff値が表示されているので最初のうちはこれらを参考に問題を選ぶと良いかもしれません。
###User表示
画像はAllタブを選択したところです。
ここではユーザの情報が表示されます。私の場合ABCのA問題が96/171問解いていることがわかりますね。
他にも様々な情報が閲覧出来るのでなにかの参考やモチベーションの維持につながるかもしれません。
また、レートがついてくればRecommendationタブが有効活用出来ると思います(だいたい自分のレートと同じぐらいのもの問題を表示したりできます)
Table表示やList表示から過去問が解けるのでガンガン解いていきましょう。
#コンテストに参戦する
コンテストは基本的に誰でも参加出来ます。参加登録はコンテストのページに入って参加登録を押すだけです。
時間になったら問題が開示されるので解きましょう。順位は問題ごとの点数の合計で決まり、同じ点数の場合早い順になります。
最近ABCはだいたい毎週か2週間に1回で行われているので金曜日とかに確認すると良いと思います。
新しくコンテストが登録されると公式のトップ( https://atcoder.jp/ )の左側に増えたりします。
Twitterをよく使う人はAtCoderの公式とchokudaiさん(AtCoderの社長)をフォローしとくと情報が勝手に集まってきて便利だと思います。
AtCoder公式:https://twitter.com/atcoder
chokudaiさん:https://twitter.com/chokudai
ただ、コンテスト中のネタバレは厳禁なので注意しましょう。最近は見ませんが参加者が1万人超えたあたりの時はちょいちょい解法言っちゃう人が居てヒヤヒヤしてました。順位表からわかる情報(例えば"C問題全然わからん・・"とか)なら呟いてOKらしいですが口が滑りやすい人は辞めといたほうが良いと思います。
##最後に
GoogleColabじゃ戦うのキツイってなったら開発環境をPCに用意したり他のものを使ってみるのもアリだと思います。
デバッグだけはAtCoderのコードテストでやるとか。こっちだと複数行がコピペ一発で入力出来るので割とアリです。たまに入力行数が多い問題ありますしね。
ところで実は問題で出てくるシカのAtCoDeer君、結構好きです。他にも「たこやきフェスティバル」なるイベントがAtCoderの問題の世界にはあったりなんじゃそら!ってなるような問題があったりして問題文読んでるだけでも割と面白かったりします。そこが良いんですよね、AtCoder。令和のたこフェス、待ってます。