こんにちは。
ツルマキと愉快な仲間たち Advent Calendar 2日目です。
最近始めたAtCoderについての意気込みと学びを書いていこうと思います。
AtCoderについて既出の素晴らしい記事は多くあるのですが、自身のアウトプットの為と、初学者目線の投稿で、同レベルの方や後で見直した時にどう間違えていたのかを振り返る事ができるようになれば良いなと思います。
AtCoderとは
AtCoderは、国内の競技プログラミングのサイトで、日本を中心に世界的にも有名なものの1つです。
ユーザーは、コンテストの実績に応じて色(ランク)付けされ、「灰→茶→緑→水→青→黄→橙→赤」の順でランクが上がる仕組みになっています。具体的な難易度の目安は他の記事やX(旧Twitter)に様々情報があるので、そちらをご覧ください。
定期的に開催されるコンテストとして、 ABC(AtCoder Beginner Contest) や ARC(AtCoder Regular Contest) があります。
これら以外にも様々コンテストは用意されおり、賞金なども用意されています。コンテストの参加は基本的に無料です。
始める理由
もともとAtCoderの存在は知っていたものの、競技プログラミングには全く手が出さないまま数年が経過していました。プロダクト開発やデータ分析をする上で、アルゴリズムへの精通は最優先ではないものの、コードを書く上での思考力の向上をはじめ、学ぶ必要と恩恵は大きいと感じていたため、研究でPythonの学習を始めたタイミングで、卒業までに入茶することを目標に始めることにしました。一般に競技プログラミングは実行時間の早いC++を使用することが主流ですが、上位勢でPythonを使用されている方がいることと、コードを書くのが楽という点も踏まえて、私はPythonで挑戦する予定です。
初学者はまず何をするべきか
僕も含めて、初学者はまず ABC に挑戦するのが良いかと思います。
基本的にABCは毎週土曜日21:00-22:40の100分間で開催されます。(週によって日曜開催であったり、都度日程の確認が必要です)
開始までにRated参加の登録をしておいた方が良いので、10分ほど余裕を持っておくと良いと思います。
ABCに参加する以外にも、過去のコンテストの問題が公開されている事も学習を進める上で非常にありがたいです。AtCoder Beginners Selectionを解いてみたり、AtCoder Problemsで学習すると、解いた問題や難易度などの確認が容易なのでありがたく使わせてもらっています。
個人的には、最新のものから順にA,B問題までを慣れるまで量こなそうと考えており、ここまでは1問15分以上悩むようなら解説や他の方の提出コードを見ても理解するでも良いかと考えています。
入茶を目指す上で、C問題まで安定して解けるという状態を一つの指標にして学習を進めるつもり(これは入茶の条件ではなく、あくまで個人の目標)です。
ザックリこれまでの学び
PythonでAtCoderを始める上で、入出力などのテンプレは長くなる上に、ググれば色々と記事が出てくるのでここでは割愛します。
- A問題 -
基礎的な入出力ができれば解ける問題が大半です。
問題の指示を素直にコーディングすることを意識して実装します。目標は5分以内に解くこととします。
- B問題 -
全探索 で解く問題が多いです。繰返し処理(for/while)を正しく使用して解くことを意識します。「制約」 から繰返しの範囲を決めるとTLEを回避できるかなー、と思っています。Pythonには、min関数など便利な関数が様々用意されているので、その辺りも過去問で学んでいきます。目標は15分。
- C問題 -
ここからは、計算量 (プログラムの実行速度)を意識して解く必要が出てきます。アルゴリズムの学習らしくなってきますね。問題文の素直のな実装だけでなく、翻訳が必要ということです。二分探索やソート、木構造、DFS(Depth First Search)、BFS(Breadth First Search)などのアルゴリズムの理解と実装力が求められるかと思います。
総じて、私の場合はサンプルで実行が通ったがWAになる場合と、TLEの場合に沼る事が多いので、修正力だけでなく、アルゴリズムの知識と正しくコーディングする能力を鍛える必要がありそうです。
最後に
今回は導入の意味合いが大きい内容でしたが、今後は自分が学んだ知識や参加したコンテストの解説など、より技術的な記事を書いていこうと思います。これからAtCoderを始める方は、ぜひ一緒に頑張りましょう!