この記事はアドベントカレンダー2022の27日目の記事です。
22Bのかにばくです。はじめまして。
突然ですが
みなさん、プログラミングしてますか?
「大学に入ったからには競技プログラミングなんかにも手ェ出しちゃおかな^^」と意気込むも、hello world!などと世界に挨拶したまま音信不通になったりしていませんか?
図書館で借りたアルゴリズムの本は呪文だらけで目が回り、気付けば机に突っ伏したり……していませんか?
なにかを始めるとき、困難は付きものです。そこで今回はプログラミング初心者である私が3週間競技プログラミングを続け、感じたことをありのままみなさんにお伝えします。
Let's challenge...
※競技プログラミングとは?という方はこちらの記事をご覧ください。
開始!
まずは国内最大手の競技プログラミングコンテストサイト「AtCoder」にアカウント登録します。
しました。
次に何をやるべきか迷うところですが、とりあえず同サイト内にあるAtCoder Programming Guide for beginners (APG4b)をやっていきます。初心者向けにプログラミングの基礎を一通り網羅してくれている問題集のようです。
12/1~
まずはApG4bを淡々と読み進めます。1節ごとにトピックが決まっていて、分かりやすい解説と簡単な練習問題がついています。
これの1章と2章を読むと、基本的なプログラムが書けるようになるそうです。
(各節についている演習問題はすべて解くのが望ましいですが、モチベと相談するのも大切で、私はすべて解いていたら飽きそうだったので気になるものだけ選んで解いていました)
コンテスト!だ!
突然のコンテストで恐縮ですが、AtCoderというサイトでは週に1度、土曜の夜9時からAtCoder Beginner Contest(通称ABC)という大会が開催されています。
コンテストでは難易度の異なるいくつかの問題が出され、参加者は制限時間の中でそれらの問題へ立ち向かいます。このコンテストに参加することで自分の実力が全体のどのあたりに位置するのかを把握することができ、おそらく多くの人のモチベーションとなっています。
やるぞ!
やりました。
傾向として初めの2,3問は基礎的な知識を問うものが多く、なんとなく見覚えがあればGoogle検索(コンテスト中でも検索はOK!)をして解くことができます。ApG4bの1,2章を読んでおいた甲斐がありました。やったね!
ところが、
4問目からはさっぱりわからず、高い壁を感じました。
おそらく初心者が競技プログラミングで挫折を経験するとしたらまずここでしょう。
「基礎的な知識は1通り身についているから、2,3問目までは解けるけど……」といった人は少なくないはず。
次の舞台へ
正直なところ、自分にはプログラムは向いていないのではないか?と思い詰め、ディスプレイごと部屋の窓から投げ捨ててしまいたくなるが、そうは問屋が卸さない。踏ん張りましょう。
弊サークルの過去記事にある競プロのめっちゃ初歩的思考法や、競プロ初心者が中級者にレベルアップするための小技集【AdC2019 47日目】などは非常に有用で、ちょうどこのレベルの人々にぴったりです。
他にもレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】といった、先駆者による記事を参考にしつつ、学習を続けます。
やったこと
以下雑にまとめます。
- グラフとか
- グラフって何?(綾波レイ)
- グラフを探索するアルゴリズム(DFS,BFS)
- 二分探索とか
- にぶたんって書くとかわいい
- DP(動的計画法)
- 難しい。種類もいっぱいあるので慣れないと厳しそう
- ApG4b
- 再帰関数の頁を読み直した
- 3,4章も読むだけ読んだ
- 難しくてよくわからんのは飛ばした
- ビット演算やイテレータなどはやるとよいかも
- AtCoder Problems
- AtCoderの過去問が、難易度とともに一覧できるサイト
- 自分の解いた問題が緑色で埋められていくため、気持ちいい
- これで自分のレベルより少しだけ難しい問題を選んで解いた
- 競プロ典型90問
- 有志による典型問題集
- 難しいからこそ典型として処理したい問題がいっぱいあった
- ☆の数で難易度分けされているため、自分のレベルに合わせて解ける
- 私は☆2,3をやっていました。☆4は少し難しい
こんなことをやっているうちに、あっという間に2週間が経ってしまいました。
そして迎える3週目のコンテスト。気になる結果は……?
そう簡単に結果は出ない……
問題のバリエーションは沢山あり、自分が勉強したところが必ずしも出題される訳ではないので、実力を反映させるには何度もコンテストに参加する必要があります。
しかし
確かな成長は感じました。4問目の壁は以前よりも低く見え、もうひと踏ん張りで解けそうなところまで来ています。そして何より
楽しい!
競プロが楽しくなってきました。3週間前と比べてもモチベーションは段違いです。継続することで確実に一歩ずつ前進していると実感できるし、週に1回のコンテストによるフィードバックも得られます。大学に入って使わなくなった高校数学の知識なども出てくるため、脳に良い影響が現れている気がします(個人の感想です)
みなさんも是非、競技プログラミングを始めて、「継続」してみてはいかがでしょうか。
「継続」……といえば
友達のいない中学生、後藤ひとり。彼女は毎日コツコツギターを練習した結果、高校入学時には「ギターヒーロー」としてネットで名を馳せるほどになるが、現実では変わらず陰キャでぼっちでコミュ症で、どうしようもない日々をすごしていた。そんなある日、突然彼女の前にギタリストを探しているという女子高生、伊地知虹夏が現れる。金欠系ベーシスト山田リョウ、陰キャの天敵キラキラJKの喜多郁代など愉快なメンバーとともに「結束バンド」として活動する彼女の人間的成長を描くまんがタイムきららMAXで連載中の大人気漫画「ぼっち・ざ・ろっく!」が現在アニメ放送中!是非ご覧ください!
ぼっち・ざ・ろっく! (1) (まんがタイムKRコミックス)
明日の担当は@toruthiさんと@iroriさんです。お楽しみに!