秘密の本棚

気になることをなんでも書きます

競技プログラミングをどうやって始めるか

競技プログラミングをはじめてみた

いまや情報系では知らない人はいない競プロをいまさらはじめてみました。AtCoderというサイトでは、(ほぼ)毎週コンテストが行われていて、過去の問題を閲覧できたり、プログラムを提出してジャッジを行ったりしてくれます。ベータ版のほうがジャッジが更新せずに見れ、提出も簡単なので便利です。

何から始めるか

しばらく勉強していますが、競プロを勉強するには、「体系的なインプット」「実戦的なアウトプット」の両方が不可欠だと思っています。インプットだけだと実際のコンテストでは厳しいこともありますし、アウトプットだけだとツギハギの知識になってしまいます。では、具体的にどうするか。

インプット:書籍を買う

やはり教科書的なものが一冊あると、自分の進み具合がわかりやすいですし、内容も充実しています。僕が使っているのはいわゆる「蟻本」という超スタンダード。

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

 

 内容は、最初にプログラミングコンテストの概要があり、その次に初級編・中級編・上級編と分かれています。僕は情報系の学部にいることもあってプログラミング経験はあるのですが、競技プログラミングに必要とされるデータ構造やアルゴリズムの知識はまったくなかったので、正直初級編からかなりしんどいです。あまり焦ることなく、ゆっくり進めていくくらいの気持ちでいいと思います。

 

この本の中では詳細な説明は省かれている傾向にあるので、自分で行間を補って読んでいく必要があります。ただ、競技プログラミングに必要な知識はほぼ網羅されている感があり、一冊持っておいて価値があると思います。ちなみに、僕はこの本をホワイトデーにもらいました。

 アウトプット:過去問に挑戦、定期的にコンテストに参加

書籍で学んだ内容を、実際にプログラムを作成して実戦的に活用し、自分のものにすることも大切です。AtCoderのインタフェースはかなり使いやすいので、有効活用していきたいところ。

 

そこで、「蟻本」の各項目に対応するAtCoder上の過去の問題を集めたサイトが便利です。書籍を読みながらこのサイト上の問題に挑戦していくと、かなり学習効果が高いです。

あとは、定期的に開催されているAtCoder上のコンテストに参加してみましょう。ほとんどは土曜か日曜の21:00開始です。用事があって参加できないことも多いですが、そのようなときはあとから問題を読んで提出することもできるので問題ありません。でも、実際にコンテストに参加してみると、やはりリアルタイムの緊張感は違います。可能であれば参加するのがよいと思います。

 

というわけで、競技プログラミングをはじめてみたので、少しずつ進捗を生んでいきたいですね(まだ初級編をやっている…)。