B-Teck!

お仕事からゲームまで幅広く

【雑記】競技プログラミングを始めたら楽しかったのでおすすめします

ふとしたきっかけで会社で競技プログラミングの本を見せて貰う機会があり、
内容が面白かったので自分でも購入して読んだり、
解いているうちにズブズブとハマって行ってしまいました。
せっかくなので読者の方にもおすすめしてみたいと思います。

競技プログラミングって何?

プログラミングを使って、出題された問題を解いていく競技です!
上級者の方でもうなるような問題もありますが、
プログラミング自体の初心者でも気軽に解いていける問題もたくさんあります!

例えば、こんな問題もあります。

119という文字列が入力されたときに991が出力されるように、9と1を置き換えてください。

このくらいなら解けそうだと感じませんか?

何が楽しいの?

これは一度触ってみてもらったほうがわかりやすいと思うんですが、
競技プログラミングの問題を解くのは、パズルを解くような楽しさがあります。
解き方を考えて、答えが出たときの楽しさが好きな人には特におすすめですね。

また、コンテストに参加したりすると、順位がついたり、レートがついたり...
自分の技量を客観的に見られること、数値で競い合っていけることも楽しいポイントです。
目標とする人や、ライバルなんかを見つけられるともっと楽しいですね。

なにか役に立つの?

いくつか役に立つと思っているポイントはあるんですけど、
1つ目は「プログラミング学習として始めやすい」ことです。
アプリを作ったり、Webシステムを作ったり…そういうのって結構他の技術や知識が求められて、
純粋にプログラミング初心者の場合なんかは戸惑いやすいです。
競技プログラミングといっても、ifやforみたいな基礎的な部分だけ知っていれば解ける問題があります!
また、実力やスコアが数値として目に見えてくるので、目標も立てやすいです。

2つ目は、「就職の役に立つ」ことです。
最近は、企業の採用活動で競技プログラミングを利用することも多いようです。
私自身、Hacker Rankというサイトの問題を解くというようなWebテストを受けたこともありました。
下記のようなサイトもあるので、これからより注目が高まってくるのでは?

なにから始めればいいの?

おすすめは過去問をいくつかを解いてみることです!
AtCoder は日本語のサイトで、これまでのコンテストの問題が公開されていてとっつきやすいです。
初心者向けの問題集として AtCoder Beginners Selection - AtCoder もあるので、
試してみてはいかがでしょうか?
また、AtCoderではほぼ毎週土曜日、初心者でも気軽に参加できる
「AtCoder Beginner Contest(通称ABC)」も開催しています!
私も用事がないときはなるべく参加して勉強しています。

もし本で勉強を始めたいと思う人は、これらの本が有名なのでおすすめです。
説明が充実しており、章立ても初心者向けでわかりやすい

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

初心者向けの本ではあるものの、解説がやや分かりづらく、中級者を目指したい人向けな印象
最強最速アルゴリズマー養成講座 プログラミングコンテストTopCoder攻略ガイド

最強最速アルゴリズマー養成講座 プログラミングコンテストTopCoder攻略ガイド

完全な初心者には難しい中級者向けの本。これが理解できるようになってきたら競プロの沼に腰まで浸かっていると思う
プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

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

AtCoderを利用する際の便利ツールなど

  • AtCoder Problems
    AtCoderの問題の解答状況を一覧できます。
    他のユーザーとの比較もできるので、モチベーションアップに利用しよう!
    AtCoder Problems

  • AtCoder Scores
    AtCoderの問題を点数順に並べて解答状況を確認できるサイト。
    AtCoder Scores

  • Comfortable Atcoder
    AtCoderを使いやすくするChrome拡張。入れておくと地味に便利なのでおすすめ。
    Comfortable Atcoder - Chrome Web Store

さいごに

一人でも仲間を増やして一緒に楽しんでいけたらいいなと思って、いろいろ書いてみました。
だいぶ駆け足で書いてしまったので、分かりづらい部分多々あると思いますが、
少しでも興味を持ったらぜひこの世界に足を踏み入れてください!
一緒にスキルアップしましょう!
わからないことがあればコメントやTwitterなど、気軽にご連絡いただければお答えします。