はじめに
プログラミング学習開始直後くらいから密かに続けていた競技プログラミング「AtCoder」にて無事入茶を果たしましたので、どのようにしてレーティングを上げていったのかの備忘録・・・というか、私のような
- ギリギリダイヤルアップ世代(戦隊モノはカクレンジャー前後)
- プログラミングを長年触れているわけではないがある程度理解した初中級者
- Python好き(「使い」というほどではない)
が入茶に至った経緯などをお伝えできればと思います。
また、見出しにもあるようにN=1の記録ですので、あくまで一つのお話として。
前置きとして
ギリギリダイヤルアップという表現をしたように、PC自体には疎くありあせん。なんならプログラミングをまともに触らないタイプながらも情報科出身ですし、PCは自作するしAdobeも触れるしタッチタイピングは1分400文字だし、という感じ。何らかソフトウェアを使う、ということは問題なく、苦手意識からプログラミングだけは避けてきたという感じです。
卑下したいわけでは決してありませんが、ずっとパソコンを触らないような業務に就いていてIT系目指そうぜ系情報商材やインフルエンサーに感化されたされたか何かで突然この何年かでパソコンごと触り始めたような方とは多少は素地が違うということです。
ある程度ITに関しての疑問が積年した上でプログラミングやネットワークを学び始めたので、完全にゼロイチではないというほうが手短かもしれません。
したがって例に上げたようなものに沿う方には本当に参考にならないと思いますし、そもそも本当にあくまで一つのお話として。
まあハリケンジャーくらいの世代なら今からでも何やっても余裕だとは思います。
JavaScript、Paizaから出会う
実はプログラミングの開始はJavaScriptでした。「ひらがなプログラミング」という入門書名著で学習し、テキトーにChromeの拡張機能を作りましたが、地力UPということでPaizaを勧められたところゲーム性にドはまり。もともとゲーマーだったのもありますが。
で、こういうのは「競技プログラミング」と呼ばれ、Pythonのほうが向いており、個人開発の面でもPythonしかないでしょくらいの勢いだったので(もちろんJavascriptも個人開発向きだとは思います)、今度はひらがなプログラミングのPython版を読んでパイソニスタにジョブチェンジ。
以降はずっとPythonです。{}を使う言語を今見ると「おおふっ」となります。Pythonも文字列系で使いますけど、そういうことではなく。
で、本格的な競技プログラミングとしてAtCoderと出会ったことで、茶色を目指す旅が始まったのです。
アルゴリズムは学んだほうがいい、けども
私が始めた2021年4月頃にはなかった良書、「競技プログラミングの鉄則」が最近リリースされましたが、これはもう初学者マストバイとしても、アルゴリズムとはどう向き合うべきなのでしょうか。
競技プログラミングをやっているとある程度傾向があるのが見て取れますが、その全てはアルゴリズムの学習で完全にカバーできません。
それよりは、まず基本的な操作を難なくこなせて、最低限「あんな操作があったなあ」とあやふやでもググってnkmkさんの記事を参照してすぐに使えるくらいは必要です。でなければABCのAすら怪しいかもしれません。
最近は難化しているのでBでもややこしいのが来ると詰むと思います。
ですので、まずはアルゴリズムよりも過去のABCのAとBをひたすらやるといいと思います。
過去問はこのページにまとまっています。
その後に、灰色のC問題にチャレンジして、当然全然解けないでしょうけども、なんとなく惜しいところまで行ってから、アルゴリズムと計算量について学ぶのがいいと思います。
私個人は、AとB問題は上記の通りですが、C問題はアイデアとひらめきだけで無理やり突破できるものを突破するというランボースタイルでしたので、かなり無駄足を踏みました。
アルゴリズムでは突破できない問題は
残念ながらアルゴリズム系書籍ではカバーされていないC問題があります。
むしろこれこそが崖というか一つのマターなのではと思います。
例えばラジアン角みたいなキーワードが出てくる図形問題、辞書で何番目的な問題がパッと思いつくところです。
これらの頻出の図形辞書問題までカバーしつつ、せいぜいDくらいまでに留めた競技プログラミングxPython特化の書籍が待ち望まれるところです。
これはもうそれらのC問題を集めておいてまとめて解きまくるのがいいかなあと思います。
アルゴリズムを学んでからはコツとテンプレ
先述の良書「競技プログラミングの鉄則」は基本的なアルゴリズムの勉強に非常に役立ちました。
ですがYouTube動画等のほうがわかりやすいものもありますので、いろいろ横断的に見てみるといいと思います。
グラフ(DFS,BFS)、DPあたりが理解できればこっちのもんです。
入茶は開催運もある
2022年末ごろのABCは、Cまで異様に簡単でDから崖(難しくなる)でした。
すると、Cまで高速で解いた者勝ち(順位の妙でレーティング爆上がり)という現象がありました。
もちろん、その「簡単とはいえCまで高速で解ける」という技量こそトータルの力量ということになるので、開催運が大きなマターではないものの、入茶にはいいタイミングだったのかもしれません。
Cすら難しい回だとなかなかレーティングが変動せず嫌になる可能性は高いと言えます。
まとめ
- ある程度参加しないとそもそもレーティングは上がっていかない。いきなり入茶とかは絶対に?無理。
- ある程度問題の感じに慣れたら早めにアルゴリズムを学ぶ。闇雲は長続きしない。
- 余計なことを考えなくていい分、入茶はやはりPythonが無難か
今後は落ち着いたらまた再開して、より上位の色を目指していきたいです。