スクリーンショット_2019-09-15_23

ABC141:小さな目標設定とプログラミング能力とは何かについて

競技プログラミングAtCodeで開催されたAtCoder Beginner Contest 141に参加した。出題された問題は問題Aから問題Fまでの6問。問題Aは簡単で、問題Fへ進むにつれてどんどん難易度が上がる。

競技プログラミングに関して、目指すべき目標は前の記事の通りだが、コンテストに参加する直前に、今回参加するコンテスト用の「小さな目標」を設定している。この小さな目標を積み重ねていくと、やがて大きな目標が達成されるだろうと信じている。

今回設定した小さな目標は「問題A、問題B、問題Cの3問は1発ACを出す」。ACとは正解のプログラムを提出したということで、不正解になるとペナルティが発生し順位がぐっと下がる。前回参加したコンテストは不正解のプログラムを何回か提出してしまったため、ペナルティが多く順位がよくなかった。大多数の参加者が正解する問題A、問題B、問題Cを確実に早く正解することは、今の私にとって非常に重要な課題。

そして、今回はどうだったか。

問題Aは1分55秒でAC、問題Bは6分23秒でAC、問題Cは14分00秒でAC。「問題A、問題B、問題Cの3問は1発ACを出す」は無事達成。順位は5166人中2235位。上位43%くらいで、満足いく結果。特に問題Cが約8分で解けたのはよかった。

コンテストの時間は100分。今回は、80分以上の時間を残した状態で、問題Dにも挑戦した。

私はプログラミング能力は大雑把に言って、発想力と実装力で構成されていると考えている。

発想力とは、問題や課題について、解決方法を導き出す力、問題を細かく分解したり、問題を読み替えたりして、解決方法を導き出す力。競技プログラミングの場合は、一見、計算する量がむちゃくちゃ多い等、複雑にみえる問題でも、解答方法はすごくシンプルになるというケースは多々ある。それに気づくことができる力が発想力。

実装力とは、プログラミング言語にどんだけ詳しいかという力。いろいろなプログラミング言語には、英語で言う英文法のようなの言語を使うためのルールがある。それをどれだけ知っているかという力が実装力。

今回、挑戦した問題Dは発想については問題はなかったが、自分にとってあまり使ったことがない実装方法が必要だった。私にとって、正解にたどり着けないのは発想力不足、すなわちどう解いていいかわからないケースが多かったのだが、今回の問題Dは実装力不足という敗因。

AtCoderでは、開催されたコンテストは終了後、過去問となりいつでもトレーニングすることができる。コンテスト終了後、実装方法を調べて、再度提出したら正解になった。実装方法さえ知っていれば、解けていたので非常にくやしい。

次の小さな目標は「問題A、問題B、問題Cの3問は1発ACを出す。そして、問題DでACを出す」にしよう。

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

ありがとうございます!
2

Takahiro Nakamori

三重県伊勢市でiOS・AndroidアプリのUX設計・UIデザイン・実装、Webサイト、Webアプリの情報設計、UIデザイン、実装を行なっています。また、競技プログラミングに参加したり、読書をしたり、2羽の文鳥と遊んだり、写真を撮ったり、洋菓子を作ったりしています。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。