Help us understand the problem. What is going on with this article?

競プロ始めた初級者が感じたことをまとめてみる

競技プログラミング(以下、競プロ)を始めて約二ヶ月経ち、生活の中に競プロが浸透してきたと感じたので、約二ヶ月で感じたこと及びこれからどうしていきたいかについてまとめておきたいと思います。(初心者の方は、AtCoder に登録したら次にやることをまずは読むと良いと思います。)

(1)競プロで感じたこと

以下では、僕が感じたことを思いついた順に書いているので読みにくいと思いますがご容赦ください。(順次更新するはず)

[1]Pythonは遅い

今まで主にPythonでプログラミングをしてきたのですが、学校の課題くらいしかやっていなかったので実行時間については特に意識していませんでした。
しかし、競プロでは実行時間に制限があるので(AtCoderなら2秒)、言語によっては正答の通りにコードを書いてもAcceptされないことがたまにあります。例えば、PythonであればC++より10倍~100倍くらい実行速度が遅いです。(これはC++が機械語にコンパイルされて直接実行されるのに対し、Pythonはインタプリタ上で実行されることに起因します。)

[2]競プロ≒受験数学

受験数学はより多くの問題を論理的に思考し(水平的思考が求められる場合もありますが)、時間内により多くの問題を解くゲームだと思って勉強していました。競プロも全く同じことが言えて、より多くの問題が解ければより高い順位を取ることができます。さらに、いずれにおいても典型問題というものが存在しており、ほとんどの参加者は典型問題をしっかり解答するという目標を掲げていると考えられます。

[3]基本が大事

基本的なことを知らないと解けない問題が多いなと感じました。
ABC(AtCoder Beginner Contest)であれば、A問題及びB問題は入力、出力、if文、ループ程度さえ知っていれば解くことができます。C問題もそれを多少応用すれば解けます。しかし、D問題以上になると、基本的なアルゴリズムを知らないと解けない問題がほとんどになります(D問題は発想でなんとかできるものもありますが)。多くの人がここのアルゴリズムを勉強するという段階で面倒になってしまうのではないかと僕は考えています。(AtCoderの色で表すなら茶〜緑くらいかな)

[4]たくさんコンテストに出るべき

慣れは本当に重要だと思います。僕もTwitterなどで個人のコンテストを発見したら時間が空いていれば必ず出るようにしています。ある程度のレベルに達すると、解くスピードも要求され、スピードは慣れでだいぶ改善されるのでたくさんコンテストに出るべきだと思います。また、AtCoderの過去問も解けば解くほど力がつくので解いた方がいいと思います。(僕は繰り返し練習が嫌いなので最近は全く解いてませんが)

[5]強い人を見つける

自分より少し強い人(ライバル)やめちゃくちゃ強い人(目標)を見つけておくとモチベーションも上がるので良いと思います。僕は幸いにも周りの環境に恵まれていて、強い人たちがたくさんいるので、勉強の励みになります(と言いながら、全く精進してないです。ごめんなさい。)。Twitterで探せば色々な強い人を見つけることができます、多分。

[6]楽しいのに勉強になる

僕は大学に入るまで楽しい勉強しかしておらず、大学に入っても全く変わらないので、あまり勉強を大学でまともにはやってきませんでした。しかし、[2]でも言ったように、競プロはゲームみたいなものかつアルゴリズムやデータ構造も学べるので、最近は多少勉強量が増えた気がします。

[7]目標を決めるべき

目標があると、より競プロに取り組みやすくなる気がします。僕は一ヶ月で茶色で二ヶ月で緑色で三ヶ月で水色という目標を立てました(見合った努力をしていないのでただの希望)。一年間なんとなくプログラミングしてきたくらいの初級者ならこのくらいがちょうどいいのかなと僕は思いますが、各々で得意不得意あると思うので色々調べて目標を決めて見て欲しいです。

[8]復習をする

[4]でたくさんコンテストにでるべきと書いたのですが、効率よく強い競プロerになるにはコンテストで出た問題を毎回しっかり復習するべきだと思います。僕は、コンテストに参加した時に解いた問題全てとコンテストに参加した時に解けなかった問題のうちの一問を復習するようにしています(初めの一ヶ月くらいは復習していなかったので効率の悪い勉強だったと思います。)。しかし、理解が全くできない問題をいきなりやるのは無意味なので、問題のレベルを見るべきだと思います。AtCoder Problemsを見れば、それぞれの問題名の色が50%の人が正解できているレート帯の色に対応しているので、参考にするといいと思います。

とりあえず思いついたのはこんな感じなので、次はこれからどうするかについて書いていきます。

(2)これからどうするか

[1]バチャコンをやる

ゲーム性の高いものに面白さを感じるので単純に過去問を解くのではなく、バーチャルコンテストを開いてそこで時間を決めて過去問を解いていきたいなと考えています。できれば二日に一回くらいのペースでやりたいとは考えていますが、学校の授業の課題の進み具合と相談してという感じになると思います。ちなみに、AtCoderの過去問を使ったバチャコンはここから誰でも開けます。

[2]学校の課題を頑張る

学校の授業でちょうどアルゴリズムの基本を扱うものがあるのでその授業の課題を全力で頑張りたいです。

[3]螺旋本を進める

螺旋本を買ったにも関わらず基本的なとこをやったら飽きました。避けては通れないと思うので、本気になったら進めると思います。

[4]機械学習も頑張る

この記事と全く関係ないんですが、機械学習を使った音楽生成をやろうとしているので、そっちも頑張ります。競プロの比重が大きくて学校の授業が疎かになりそうなので頑張ります。

長々とした文章を最後まで読んで頂いてありがとうございました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away