AtCorderはじめました。Python3からC++へ

アルゴリズム

みなさんこんにちは。いつか、いつかと考えながらも、まったく進められていなかったAtCoderにやっと真剣に力を入れ始めた小幡です。

AtCoderについて全く知らないという方は、以下公式サイトのリンクから雰囲気を掴んで頂けると幸いです。まだまだ始めたばかりの私から見えるAtCoderは、アルゴリズムを学ぶ場というイメージです。

全然違う話かもしれませんが、コードを提出する前にテストする流れからも、テストをする習慣なども身について良いなと思っています。テストしてみてから提出しないと、ほとんどの場合どこかで細かいエラーとなってしまう私にとっては、とても良いサービスだなぁと感じています。

なぜアルゴリズムを学ぶのか?

これまでPythonというプログラミング言語について勉強してみたり、オブジェクト指向について勉強してみたり、データベースの最適化的な事の勉強をしてみたり、自分でフルスタック的にサービス開発をしてみたり・・・と必要に感じる事について学んできました。まだまだそれぞれの学びが深いとは言えない状況ですが、なぜアルゴリズムを学ぶのか?

アルゴリズムを学ぼうと思ったのは、せっかくプログラミングという頭で考える事で、手を動かす回数を減らすことができる事を仕事にさせてもらっているのにも関わらず、手を動かす事が多いなと思ったからです。もっと簡単に言うと、効率的に仕事がしたい、と思ったからです。

無駄をなくして、もっとやるべきこと、やらなければならいことに集中して取り組みたいと考えて居ます。もちろんアルゴリズムを学んだからといって全ての作業が効率的になるとは考えてはいませんが、考える論理的思考が少しでも活発化されれば良いと考えて居ます。

PythonではなくC++を使う理由

私は普段Pythonを使う事が多いのですが、AtCoderではC++を使おうと決めていました。それにはいくつか理由があります。Pythonが万能であったのならば、恐らくアルゴリズムの学習にもPythonを使っていたでしょうが、やはりそこは適材適所かなぁと思います。

C++についてチュートリアルで紹介されていること。

プログラミングが全く初めてと言う人のためのプログラムが準備されています。改めて初歩的なint型とdouble型についての解説などから始まり、最も簡単な問題の紹介など、とても充実しています。特に、AtCoderで使う独特の問題の解答方法や解答結果についても丁寧に説明されています。

以下リンクから実際のチュートリアル的なものが見る事ができます。C++をまったく触ったことが無いという人にも優しいですね。書き方は現場的ななのか少し疑問に思う所もありますが、とりあえず郷に入っては郷に従えの精神で、紹介されている書き方に倣って学習を進めています。

このような素晴らしい入門場所があるのなら、C++でやってみようと思うようになりました。

C++でアルゴリズムの解説をしている本を買っていた。

半年ほど前に本屋で時間を潰す事があり、その時たまたま手に取ったのが以下の本でした。

この本を手に取って思ったことは「AtCoderのよりよい解答方法がわかるのかもしれない」、「簡単なC++の文法しか使わなくて良いのかもしれない」というポジティブな面と、「まったくアルゴリズムがわからない」というネガティブな面でした。

アルゴリズムがわからない、という事がわかったのはとても不思議な感覚でした。それまでは、アルゴリズムが何かということすらしっかり認識できていなかったのだと思います。

この本を読んだ事で、ここに書いてあることを理解すればAtCoderの問題が解ける様になるかもしれないと思う事ができました。

今思えば、とにかくAtCoderの問題をやってみれば良かったとも思う訳ですが。

Pythonより早いらしい。

インタプリタ言語のPythonよりも、コンパイラ言語のC++の方が実行速度が速くなるのだろうなぁというぼんやりとしたイメージしかなかったので、具体的にその違いを学ぶ良い機会になると思ったのもC++を使おうと思った理由の1つです。本当に早いのだろうか?どのくらい早いのだろうか?といったイメージです。

Pythonは学ぶのも簡単だと思いますし、とても読みやすく初心者も入門しやすいイメージでしたので、すこし難しくても効率が良い言語を選択することが、アルゴリズムを学ぶことと、実際に扱うときには良いのかなと思っています。

突き詰めていくと、実行速度とメモリー制限でPythonではAtCoderの問題を解きづらくなるという話も聞いたことがあります。

C++に憧れがある

以前にも紹介した以下の本では、使う言語をC言語からC++に変えるエピソードが紹介されていました。

この本では新しいOSを開発するためにC++を使用しています。私のイメージではC++は、とてもハイレベルな言語と言うイメージです。これは扱うのがとても難しいかったり、メモリー管理が大変だったり、コーディングにおいて少しの無駄やスキが許されない言語のイメージです。

そんな言語を扱えるのだろうか?やれる機会が来たのなら、是非扱って見たい!というような憧れの意識が強かったです。やってみて不都合があるのならば、Pythonを使えば良いと思いますし、AtCoderを真剣に取り組むなら情報量が多い言語の方が、変なところで悩まずにすむかなぁとも考えています。

これからの目標

AtCoderについてのネットの記事を眺めてみると「水色」になることが、1つのステータスらしいですなのでその「水色」に目標を定めてみたいのですが、どうもこの「水色」というのは、1年間しっかりアルゴリズムの勉強をしてAtCoderのコンテストをコンスタントにこなす必要があるらしく、ちょっと勉強したらなれるというものではないらしいです。

なので、長期的な目標は「水色」になることですが、最短でも1年を見ていますし、短期的な目標としては、やっと解答方法がわかったところなので、まずは過去問をたくさん解いてみて、コンテストを1回やってみるというところでしょうか。

その前にAtCoderのC++入門を一通りやってみるという壁もありますので、こちらからコツコツ頑張ってみたいと思います。四則演算やif文など、基礎からきっちりやっていくことが、良い解答法を見つけるための近道かもしれませんので。急がば回れ。

おそらく、最初は何もできず挫折気味になると思いますので、気長に1ヶ月は続けてみようという軽い気持ちです。そして1か月後くらいに、またこうしてブログで報告できるようにしたいと考えて居ます。

まとめ

最後までお読み頂きありがとうございました。本日はAtCoderを始めてみましたという報告でしたが、この記事をきっかけにAtCoderやアルゴリズムに興味を持たれて勉強してみたり、何かのお役に立っていれば幸いです。

またの機会にお会いできることを楽しみにしております。

この記事を書いた人

小幡 知弘

1990年茨城県神栖市生まれ
2013年大阪芸術大学卒業
Python×Webエンジニア