はじめに
以前、プログラミング初学者向けに、プログラミング問題やってみると良いよ~という記事を書きました。
「効率的にプログラミングを学ぶには何かを作ること!」とよく言われますが、いきなりアプリやWebサービスを作り始めるのではなく、まずはこういったプログラミング問題に取り組んでみるのも良いのではないでしょうか。
このときはソニックガーデンのプログラマである伊藤さんが紹介してくださった問題に取り組みましたが、今回は競技プログラミングサイト『AtCoder』の初心者向け問題を解いてみました。
結論から言うと、プログラミング問題はやっぱり勉強になるし楽しいです。特に、新たな言語を学ぶのに良さそうです。
AtCoderとは?
AtCoderは競技プログラミング(プログラミングコンテスト)のサイトです。
定期開催されるコンテストにリアルタイムで参加するだけでなく、過去のコンテストで出題された問題に取り組むこともできます。
たとえば、このような問題が出題されます。
https://atcoder.jp/contests/abs/tasks/abc087_batcoder.jp
あなたは、 500 円玉を A 枚、 100 円玉を B 枚、 50 円玉を C 枚持っています。 これらの硬貨の中から何枚かを選び、合計金額をちょうど X 円にする方法は何通りありますか。
同じ種類の硬貨どうしは区別で きません。2 通りの硬貨の選び方は、ある種類の硬貨についてその硬貨を選ぶ枚数が異なるとき区別されます。
使用する言語は自分で選択することができ、メジャーな言語はほとんど網羅されています。対応言語はこちらで確認できます。
ただ、最新バージョンでない可能性があるので注意です。ちなみにAtCoderにおけるRubyのバージョンは「2.3.3」で、最新バージョンではありませんでした。
まずは初心者向け問題から
「AtCoder Beginners Selection」という初心者向け問題集が用意されています。僕もこの問題集から取り組んでみました。
AtCoderの何が良いの?
まだコンテストには出場していないのですが、初心者向け問題を解いてみた感想としては「勉強になる!楽しい!」です。特に
- 豊富な過去問
- 他の人の回答が見れる
の2点が「言語の勉強」の教材として優れてるな~と感じました。
豊富な過去問
過去に出題された問題にいつでも取り組むことができます。その数、約2000問。これだけあれば問題に困ることはないでしょう。
過去問に取り組むには、有志サイトである「AtCoder Problems」が便利です。
こんな感じで、自分のIDを入力すると、過去問の進捗度が数値化・グラフで可視化されます。ゲーム感覚で進められるので楽しいです。
※画像はAtCoder社長の高橋さんのデータを拝借しました。(僕はまだ初心者向け問題を終えたばかりで見てもつまらないデータなので......。)
他の人の回答が見れる
AtCoderでは自分だけでなく、他の人が提出した回答も閲覧できるようになっています。
これがすばらしくて、他の人のコードと自分のコードを比べることで、ものすごく勉強になります!
自分では気づけなかったアルゴリズムを使っていたり、知らなかった標準ライブラリを使っていたりと、気づきを多く得られます。
問題に取り組む際は、「正解した!さあ次の問題~!」ではなく他の人の回答を見ると勉強になるのでおすすめです。
あとがき
ちまたでは「競技プログラミングは業務には活かせない」という意見もあったりします。
たしかに、高橋さんのブログにもある通り、競プロを突き詰めると一般の企業では力を持て余すようになるみたいですね。
ただ、最初に書いた通り「経験のない言語の学習」においてはうってつけの教材ではないかな~と感じました。
今後はリアルタイムでコンテストに参加してみたいと思います。