はじめに
はじめまして! 中学2年生のAwashAmityOakと申します! Python歴5年、最近の推し言語はRustです。今回はQiitaに初めて記事を投稿させていただきます。
入緑!
(本題は「実践したこと」まで飛んでください。)
私は2023年9月末、学校の友達に誘われてAtCoderを始めました。以前から競技プログラミング(競プロ)やAtCoderの存在は知っていたのですが、今の自分には必要ないと思っていました。しかし、友達がAtCoderでRatingを上げるにつれて、プログラミング力も上達しているのを感じ、負けていられないと思ってやり始めました。
2ヶ月も経たず、順調に茶Coderになり、その後も着々とRatingを伸ばしていったのですが、始めてから3ヶ月半ほどで停滞期に入ってしまいました。しかし、その後の努力が実り…、
AtCoderでのRating推移 |
2024年3月9日のABC344で初めて5完し、緑Coderになることができました!
今回は、そのために何をやってきたかについて書いていきます。
実践したこと
「過去問のC問題以下を埋める!」とか「この書籍で猛勉強する!」とか真面目な人たちがやっているようなことは、一切やっていません。
私は、AtCoderでは、主にPythonを使用しています。
1. 過去問を解く
基本的なことです。AtCoder Problemsで、ちょこちょこ問題を解いて、経験値を積んでいきました。しかし、そこまで積極的にやっていなかったので、私の場合はあまり意味がなかったのではと思っています。
2. アルゴリズムを学習する
競プロに出てくる典型的なアルゴリズムを学習しました。理解度を五段階評価して、高い順に並べてみます。緑Coderになるための必要な知識として、参考にしてください。
全探索 (理解度: ⭐️⭐️⭐️⭐️⭐️)
キホンのキ。多分一番最初に覚えた。bit全探索はギリギリできる。
累積和 (理解度: ⭐️⭐️⭐️⭐️⭐️)
一番好きなアルゴリズム。
二分探索 (理解度: ⭐️⭐️⭐️⭐️☆)
ソートされてる場合だけ使える速いやつ。テンプレート無しに書くことはまだできない。
深さ優先探索(DFS) (理解度: ⭐️⭐️⭐️☆☆)
基本的なことはわかるけど、双方向のやつとかの派生版はまだ理解してない。
幅優先探索(BFS) (理解度: ⭐️⭐️⭐️☆☆)
基礎はわかる。派生版のダイクストラ法は少しわかる。
動的計画法(DP法) (理解度: ⭐️⭐️☆☆☆)
1次元だったらできる。2次元になると、ナップサックとかの典型問題以外は、ほとんどわからない。
その他諸々 (理解度: ⭐️☆☆☆☆)
Union-Findとかもできるようになりたい。
とりあえずこの辺のアルゴリズムを覚えていれば、緑Coderになることは可能だと思います。
3. C++を勉強する
AtCoder Programming Guide for beginners(APG4b)を一通りやりました。でも、たまにしかC++を使わないので(大体Pythonでいける)、そこまで有用性があったとは思いません。
あと、今の時代はPythonコードをC++に変換してくれるChatGPTがあります。そのため、基本的な構文さえ抑えていれば、緑Coderになるためには、C++を書けるようになる必要はないと思います。(あくまで私の考えです。)
今後、学習したいこと
私の目標は、今年の7月末までに、水色Coderになることです。そのため、ダイクストラ法やUnion-Findなどのまだ学習していないアルゴリズムを使えるようにしたいです。(過去問も積極的に解いていかないと、身につかないよなあ…。)
余談
ABC344の成績 |
緑CoderになることができたABC344のE問題では、終了時間まで残り5分のところで、自分のコードにバグを見つけ、提出したらACを取れました。終了時間間際だったのと、初めての5完だったのとで、しばらく興奮が収まりませんでした。競プロをやっているとこういうこともあるので、競プロを始めようか悩んでいる人は、ぜひコンテストに参加してみてください!
おわりに
Qiita投稿は初めてなので、思ったより記事を書くのが大変だということに気づきました。多分、こんな丁寧な記事は、当分書かないと思います。
競プロに関しては、これからも日々精進して参りたいと思っています!
この記事が良いと思ったら、ぜひいいねとフォローをよろしくお願いします! Qiitaを動かすにあたって、$\mathbb{X}$のほうも新しくアカウントを作ったので、そちらもフォローなどしてくれると泣いて喜びます!
最後まで読んでくださり、ありがとうございました!