所謂色変記事です。2021年7月24日にABCへ初参加し、同年12月11日入緑達成したため、自身の経歴と半年間の軌跡を此処に残したいと思います。
割とどこにでもいる(と思ってる)量産型エクセル職人系のエンジニアです。得意な分野はエクセルで、苦手な分野はそれ以外です。嫌いなツールはエクセルです。フロントとかバックとか全体的に広く浅い知識しかないです。githubとかDockerとか、付け焼き刃の知識しか無い程度です。基本情報もITパスポートも持ってません。
今の仕事を続けて、何かしら技術が自分の中に積み上げられないなという危機感を覚えたのが春先。5月頃の話です。競技プログラミングやAtCoderといった界隈があることは既に知ってたので、どれだけの知識技術が自分の中に積み上げられるかは分からないけど、何もやらずに人生の時間を消費するよりは何かしていたほうがマシだろう、という消極的理由でAtCoderの世界へ飛び込んでみました。
基本的に、「解けるdiffの問題を、安定して、より速く解く」を意識して過去問消化、精進に望んでいました。 「A問題、B問題、C問題が60分で解ける状態」であれば、本番中に次のD問題に使える時間は残り40分。この60分を50分に短縮できれば、D問題に使える時間は50分に増えます。 また、本番後の解説を確認、復習で週に1問ずつ自分の中の出来ることを増やしていくイメージです。8割以上は速解きに振った方針でしょうか。 実際に、入緑した際のタイムは、Aに1分、Bに4分(+1WA)、Cに3分、Dに12分で合計20分(+1WA)でした。本番のうち80分は新しい問題を見て必死に考えている状態でした。 また、同じようなdiffの問題を安定して解けるようになれば、本番中に大きくコケてレートが暴落する機会は減るんじゃないかとも考えています。
速解きの速度を上げるため、A,Bの灰埋めから着手しました。「A,Bの灰diff埋めは虚無」などと言われている方もいらっしゃいます。実際に強い方からしたら「今更100マス計算をしたところで何が上達するんだ」、というような感じでしょうか。競技プログラミング始めたばかりの私には、素振りのような効果があった気はします。少なくとも、A,Bが埋まった頃には入力部分の作り方で悩むことはなくなりました。
若い力は既に失われてしまっているので、「大量に公式を覚えてパターンにはめて落とす」ようなやり方ではやっていけないだろうなぁ、とぼんやり感じていました。
なので、理解したアルゴリズムはとても少ないです。
胸を張って、自身を持って「まぁ、うん、少しなら、なんとなく、どういうことしてるかは分かるつもりです」って言えるのはこのくらいでしょうか。
これでも学習量としては多かったです。どちらかというと、collection型に関する知識や、標準ライブラリ等、もう少し低い地点での知識をかき集めていました。
「n in list」でリスト内を探索すると計算量大変だけど、setなら1なのでリスト内探索するならsetでどうにかしたいな、とか。
dequeのpop,appendをleftにするかrightにするかでBFSからDFSに変形できるよね、一緒でいいじゃないですか、とか。(厳密には違うかもしれませんが)
1つ1つの理解を深めて、しっかり使いこなせるようになれば、本番で全く知らない問題が出てきてもなんとかゴリ押し対応が出来るのではないだろうかと思ってます。
新しいものを1つ覚えたとして、その1パターンでしか使えないのであれば、覚えるための労力が勿体ないな、とも…貧乏性です。