アルゴリズム | AtCoderを1ヶ月続けてみた感想

ステップアップ

皆さんこんにちは。競技プログラミングという世界を知ってから1ヶ月、コツコツ勉強をしながらAtCoderで行われているコンテストに、これまで3回参加してきた小幡です。

以下にこれまでの成績表を貼っておきます。

今回は

atcoder_3

レーティング47って…(苦)報告することでもないですね

Atcoderのコンテスト(ABC)は週に1回行われていて、私が初めて(1ヶ月前)から4回行われましたが、そのうち1回は九州に行っていて参加できませんでした。

今回の記事では、まだまだAtCoderを始めたばかりというイメージですが、これまでの感想を書いていきたいと思います。

休日の夜9時に集中するということ

まず、コンテストは休日の夜9時に行われています。土曜日化日曜日の夜9時に3回とも実施されていたのでそう思っているだけなので、もしかしたら別の日程で行われる可能性もあるのかもしれませんが。

この時間について、今までの生活を振り返ってみると、やりたい事を自由にしていた時間だったと思いますので、その時間をしっかり集中してコーディングに取り組めていることはとても良いことだと思います。

定期的に開催されていることがとても良いなぁと感じています。この定期開催があることで、毎週末のコンテストに向けて過去問を解く習慣もできましたし、モチベーション維持が出来ていると感じています。

どうしても日曜日の夜9時になると、「明日から仕事だからゆっくりしたい」というような気持ちになっていましたが、「コンテストがあるから集中したい」に気持ちが切り替わりました。コンテストは100分間なので、そこに全力で集中して、終わったら出来なかったところの解答を軽く見て、ぐったりするのでその勢いで眠ることができます。

そして翌日の朝に、解答をよく読んでみたりする流れが少しずつ出来上がってきたかなぁと言うところです。

人のコーディングを見る事で新しい気づき

少し難しい問題に挑戦すると、ほとんどの場合自分の力では解ききれないので、既に正解しているコーディングを見ます。この時、人のコーディングを見る事で新しい気づきがたくさんありました。

一番強く感じる事は、正解は1つではない、ということです。

まだまだ簡単な問題で苦労している状態なので、ほとんどの場合の解答はmain関数1つでまとまっているのですが、そのmain関数のなかでも様々な解答が見られるのは面白いことだなぁと思います。

main関数1つだけでも、人によってバラつきが起こっているのだから、これが規模の大きいプロジェクトになったとしたら、大変なことになるだろうなぁと言うのは容易に想像できます。

そういったコーディングが行われているなかで、1つの目標に向かってプロジェクトをまとめていける人はすごいなぁと改めて感じました。

コーディングの1つ1つでも、何をどうすることが、最善に近づけるのかを考えて、考えて、考える必要があるということにも気が付くことが出来たと思います。

出来るようになった問題しか解けない

コンテスト参加にあたって、ひたすら過去問を解くということをしているのですが、その問題のほとんどがわからない問題でした。

そんな中でも、何個も過去問を解いていくうちに共通した箇所がいくつかあり、それが出来るようになるとコンテストでも同じ部分だけが、正解することができると感じています。

これはある意味、アルゴリズムを理解しているというよりは、単純にAtCoderの問題の解き方を理解しているかどうか、という事になってきているかと思いますが、最初のうちは仕方がないのかもしれません。

というのも、例えばC++で単純な標準入力と標準出力ができないと、一番簡単な問題も解答することができないからです。この一番最初の簡単な問題を解くためには、その方法を知る必要があります。そしてその方法は過去問を解いて、正解することで身に付きコンテストでも正解することができるというイメージです。

これは、私の今の実力は、やっと問題を読んで、考えた結果をコードとして提出することが少しできるようになったというイメージです。

正直に言って、まだまだ頭の中で考えた処理をコードとして落とし込むことが出来ていません。その1つの原因にデータ構造を完全に理解できていないことがあると思います。

そういう課題も含めて、過去問を継続的に解いて行き、自分のできないところを出来ることに変えていく必要があると感じています。

アルゴリズムの大きな壁

これまで記して来た課題もそうですが、ほんの少しだけアルゴリズムの大きな壁が見えてきました。前回のコンテストのD問題では「深さ優先探索なのか、幅優先探索なのか・・・」という様な議論をツイッター上で見ましたが、そういう議論にまったくついていけないなぁという事を感じました。

まだまだ入出力とデータ構造すら完璧ではありませんが、そろそろアルゴリズムの大きな壁に挑戦していかなければならないなぁ、と手ごたえを感じ始めています。

学習速度はとても遅いと感じていますが、それよりも継続することが重要だと考えています。AtCoderのユーザの平均コンテスト参加数が4回ということだったので、今の「少しできるようになったと思っている状態」で、かつ、「アルゴリズムの大きな壁に向き合った時」に、AtCoderのコンテストに参加をしなくなってしまう気持ちは、少しわかります。

1ヶ月ほど時間も経てば、ユーザーの生活環境も少しは変化が起きているとも思いますし。

上に貼った私の成績も3回までは、一応右肩あがりでレートが上がって来れましたが、これからはそれをモチベーションにして挑戦することは苦しくなってくると考えており、過去問を継続的に解いて行き、過去問の回答率向上を一番に考える事が重要なのかなぁと考えています。

まとめ

最後までお読み頂きありがとうございました。今回はAtCoderを始めて1ヶ月経った感想を書いてみました。

次回も1ヶ月後くらいに報告が出来ればと考えて居ます。

この記事が少しでも皆さんのお役に立っていれば幸いです。

それではまた次回、お会いできることを楽しみにしております。ありがとうございました。

この記事を書いた人

小幡 知弘

1990年茨城県神栖市生まれ
2013年大阪芸術大学卒業
Python×Webエンジニア