誰でもプログラミングの腕を試すことができる、AtCoder(アットコーダー)というサービスがあります。
いわゆる「競技プログラミング」と呼ばれているもので、簡単に言うと、全世界一斉「プログラムを早く書き上げるレース」って感じです。
幅広いプログラミング言語に対応しているため、1つの言語しか学習していない場合にも挑戦することができます。
制限時間内に問題を解く、というシンプルな仕組み。
問題には、問題本文に加え「入力例と出力例の組」が複数個用意されています。
入力例の通り入力すると正しい出力が得られるプログラミングを書き上げ提出すると、自動で採点が行われます。
そんなこんなで得点を競い合うわけです。
AtCoder全く知らない人向けの説明はこのくらいにして本題へ
(私も2回ほど参加しただけで詳しいわけではないので)
Pythonの基本文法覚えたての私は、
「繰り返しとか条件分岐とかリストとか駆使して何でも解いてやるぞ!」
みたいな心持ちでAtCoderに挑んでみました。2か月前くらいかな。
問題文を読んであれやこれや試行錯誤した末、完成したプログラムを提出してみると
TLE(実行時間超過)と警告され、正解(AC)にしてもらえない。
(ちなみに、場合分け忘れてたりそもそも間違ってたりする時にはWA(不正解)と表示される。)
多少下手くそなプログラムでもちょっとくらい点数もらえるだろうな、と甘い考えで挑戦した私は、A~Fの全六問あるうちのC(3問目)がTLEとなり結局解けずに終了。
......それからひとり反省会。
いろいろ調べてみると、敗因は「アルゴリズム」に対する無知さだったようです。
「二分探索法」すら知らず、いわゆる「全探索」のみですべてのプログラムを書いていました。
例えるなら、辞書の引き方を知らない子供に、「1ページ目から順番に探せ!」と教えているようなもの。こんな辞書の引き方をする人はいません。どうみても効率悪いから、正しい引き方を教えてあげるべきです。
競技プログラミングでは、単に「正しい出力が得られる」だけではなく、過程に工夫を施すことが求められているようです。
というわけで、今後「アルゴリズム」についての勉強にも手を出してみて、それからAtCoderに再挑戦してみようかなという記事でした。
ここまで読んでいただいてわかる通り、競技プログラミング全くの初心者の見解であることはくれぐれもご承知おきください。
それではまた。