
【色変記事】プログラミング未経験文系→AtCoderで入緑しました
はじめに
2023年4月に競技プログラミングデビューし、早くも1年半が経過しました。競プロ初心者の頃は1、2完で灰色パフォーマンスが当たり前でしたが、先日開催された「AtCoder Beginner Contest 378」にてAlgorithm部門で入緑をしました!今回の記事では入緑するまでの経緯を軽く振り返ったものとなっています。既に他の方が書かれている入緑記事と内容が重複する箇所があると思いますが、何卒ご了承ください。それと文章中に誤った発言をしている箇所がありましたらご指摘いただけると幸いです。

入緑直前でレートが下がってしまい、モチベーションが低下してアカウント削除してしまった

自己紹介
・文系の大学生4年(2024年11月現在)
・競プロを始めたのは2023年4月
・数学は苦手
・基本情報技術者試験(FE) 取得済み
・FE以外で特筆できる実務経験やスキル等は皆無
経済学を専攻している大学4年生です。経済学部は数学と結びつきが強く、文系学部のなかでは比較的理系寄りです。ですが、私は数学が苦手であっても落単しないような講義ばかりを履修していた文系人間でした。正直なところ数学は非常に苦手です。高校数学ⅠAの時点でだいぶ怪しく、数学ⅡB以降はほぼ知識が皆無です。ⅢC・大学数学はもはや未知の領域です。参考程度に先日参加した Online Math Contest の最終成績を掲載します。

プログラミングについても、大学3年生になるまでほとんど触ったことがありませんでした(中学生の時にホームページ作成の課題が課され、その時にHTMLを触った経験があるだけ)(HTMLはプログラミング言語ではない)。
数学力とプログラミング力、競プロをする上では欠かせない能力が不足していた人間でしたが、そんな私でもAlgorithm部門で緑コーダーになることができました。(余談ですが、競プロのおかげで基本情報技術者試験にも合格することができました)
入緑するまでにしたこと
ここからは入緑をするまでに、どのようなことをしてきたかを振り返っていきます。
アルゴリズム・データ構造をひたすら覚える
茶~緑色の難易度帯の問題は、アルゴリズム・データ構造の事前知識がないと自力で解けない問題が多いです。そのため、競プロにおいてはアルゴリズム・データ構造の学習が(ほぼ)必須となります。以下、学習したものだけ列挙します。
コンテスト本番で実装したアルゴリズム・データ構造等
全探索
順列全探索
Bit全探索
二分探索
深さ優先探索 (DFS)
幅優先探索 (BFS)
ダイクストラ法
しゃくとり法
累積和(一次元、二次元)
メモ化再帰
動的計画法 (DP)
Union-Find
学習したが本番で実装しなかったアルゴリズム・データ構造等
BitDP
セグメントツリー
クラスカル法による最小全域木の構築(?)
おおむね緑コーダーになるまでに学んだアルゴリズム・データ構造は以上の通りです。学習にあたってはE8さんが執筆された本を使いました。図解でわかりやすく解説されており、非常に役立ちました。数学が苦手でも取っ掛かりやすいと思います。
過去問を解く
アルゴリズムを覚えるだけでなく、実際に過去問を解いて練習することも重要です。過去問演習においては有志の方(kenkooooさん)が運営されている「AtCoder Problems」と呼ばれるサイトを活用するのがおすすめです。

非常に重宝しました
VRC競プロ部への参加
競プロのモチベーション維持の一環として、「VRC競プロ部」に参加していました。VRC競プロ部は、VRChatと呼ばれるVRSNS(ゲーム?)にて開かれている競プロのコミュニティです。自分とは比べ物にならないくらい強い競プロerが集まっては、VR上で難易度が高い問題の議論をしている謎の集団です。競プロ上級者向けのイベントばかりではなく、初心者向けのイベントも開催されています。毎週土曜日にはABC感想会が開催されており、A~D問題の解説が中心となるので、初心者でも参加しやすいと思います。
VRC競プロ部の部長を務めている方の記事(テッドさん):
ABC感想会の活動内容についての記事(あめんばーさん):
その他:
【宣伝】
— テッド/妹尾@VRC競プロ部 (@cleantted_s) July 21, 2023
VRChatter・競プロer向け「VRC競プロ部」の宣伝です!
「競プロを楽しく継続できる場」を目指しているコミュニティです!
・競プロを一緒にする仲間がほしい
・競プロはじめてみたい
・競プロやってるけど、VRChatが気になる
という方はぜひ覗いてみてください!!
(詳細はスレッド) pic.twitter.com/C3u6vqFXBk


UnionFind、BitDP、セグメントツリーはここで知りました
VRC競プロ部に関しては、自分の競プロ学習において非常に大きなウェイトを占めていると思っています。主催者のテッドさんをはじめ、VRC競プロ部を盛り上げている(とても)強いメンバーのおかげもあって、競プロのおもしろさや奥深さを知ることができました。
今後の展望など
今のところ、これ以上競プロを極めようとは考えていないです。本来なら水色コーダーを目指してより一層自己研鑽していきたいところですが…。(水色になるための数学力が足りない……)とはいいつつも、プログラミング学習の習慣をつけるという意味で競プロは非常に有用なコンテンツだと思っているので、今後もAtCoderのコンテストには積極的に参加していきたいです!なんやかんやまだHeuristic部門の参加経験がないのでAHCにも参加してみようかなと思っています。
参考にした記事
最後に、VRC競プロ部の方が書かれた記事を紹介します!(掲載許可済み)入緑になるまで、いろいろ参考にさせていただきました….ありがとうございます。
ぷせうどさんのDFS・BFS記事
DFSやBFSは競プロで必須のアルゴリズムです。私はこちらの記事を読み容易にDFSやBFSを実装できるようになりました。
あめんばーさんのライブラリ記事
競プロをする上であらかじめ持っておくと便利なライブラリをまとめた記事となっています。ダイクストラ用のライブラリ実装で役立ちました。
おわりに
入緑記事は以上になります!最後まで読んでいただきありがとうございました!