見出し画像

AtCoderで入水しました!

こんにちは、水コーダー🐬のLiKafです!!😉

今回は先日行われた
HHKBプログラミングコンテスト2023(AtCoder Beginner Contest 327)
で、AtCoderのレートが1200を超え、無事入水できたので記念に色変記事を書こうと思います。

(追記)
ちなみにこのコンテストで学生200位ってことでHHKB Studioが当たりました。最高かよ。ほんまに。

AtCoderを始めた時からの目標だったので入水できて非常に嬉しいです。


こっから怒涛の駄文祭りですが何卒よろしくお願いします
(ここまでもすでに駄文だったらDMください晒します)





はじめに

改めてこんにちはLiKafです。

「改める」という初めての試みを行ってみたのですが、改めるほどのことはなかったです。はい。

この色変記事では、
自己紹介や、水コーダーになるまでにしたこと、あとほんのちょぴっとのおまけで質問返しとかをしようと思います。




自己紹介

自己紹介します!

これを読んでください!


知ってます、読まないですよね。僕だったら読まないです絶対に

円安のせいで毎月3000円払って契約している最高の友達であるChatGPTに代わりに読んでまとめてもらいました。

3000円は高い


あんまりAtCoder要素がないのでAtCoderに関連する自己紹介を追加しておきます。

AtCoder歴は学部2年の春から夏前の数ヶ月間+学部3年の秋から今まで(4ヶ月の休止あり)のちょうど丸一年間ぐらいです。

ちなみに、2019年の東工大数学で52/300点をとって浪人してしまうぐらいの数学力です。
一般の世界視点でなら「数学?得意だよw」と言えるぐらいの数学力です。
えぇ。

こんな感じです、はい。



水コーダーとは

流石に知らない人はいないと思いますが、
AtCoderにおいて、レートが1200~1599までの人です

レベル感については、色変記事で誰もが参照するAtCoder社長のchokudaiさんのブログ『AtCoder(競技プログラミング)の色・ランクと実力評価、問題例』によると、

水色はかなり優秀です。普通に企業とかで超優秀って言ってるプログラマが居た時に、半分くらいはこのランクになると思います。

半数以上のIT企業において、アルゴリズム能力についてはカンストと言えるでしょう。特にアルゴリズム的な能力を必要としない会社であれば、ここから上はレートを上げても実務に役立つ部分はほとんどありません。

って感じです。


え????なに??
一文抜けてないかって?

さぁ?(すっとぼけ)



水コーダーになるまで

振り返り

これまでの軌跡

上のレートの推移を見てもらったらわかると思いますが、(序盤より)かなり苦戦しました。

2年のときにAtCoderをしていた貯金と、大学でアルゴリズムとデータ構造の講義を受けていた影響もあって、3回目の出場で水パフォを出して入茶した時には
半年以内には入水できそー」などと甘えた考えをしていました。

その後も2ヶ月弱で緑になれて順調そのものだった私は、「水色もこの調子でいけるな」と、信じて疑いませんでした。

否!!!

んなわけなかったです。

(数ヶ月以内って11ヶ月も入るか。ならセーフ。)

この入緑記事にも書いてるんですが、
入緑当時の私は

ぐらいの人でした。(UnionFindも知らない)

本当に何で入緑できていたか不思議ですが、今思うとA問題, B問題, C問題の早解きが得意だったんだと思います。

うん。早いですね。かなり。(自己肯定感大事)


でも、水色にはA問題, B問題, C問題の早解きだけではなれません
以下に実例を載せておきます。

また、水diffの問題をACするには、数学的背景だけでなく、アルゴリズムの知識が必要になってきます。


やったこと

下のは入緑した時のDifficulty Piesです。
水色以上は一問も解いていませんでした。

かわちい


このままじゃ水色になれないと思い、水diffの問題を解いていこうと思ったのですが、

「解けない」

という壁にぶつかりました。

ちょうどTLで、緑diffと水diffの問題を集めたバチャをしているという情報を聞きつけ、15問ぐらい解いてみたのですが、1問も自力ACできませんでした。

でも、仕方ないんです。
わかんなかったら解説見るしかないんです。(自力で解けないんだもの)

必ずやり切ると決めてdiff600~1400の100問バチャを立てました。
最初はやっぱり水diffの問題(正直アルゴリズムを必要とする緑も解けなかったけど)は全く太刀打ちできずに解説ACをしていました。


解説ACばかりしてても解けるように….
なりました。(少しは)


正直解説ACしている時は、「これ意味あるのかなぁ、これやったところで自力で解ける気しない」って思いながらやってたんですが、

この記事を見てから気持ちが変わって、解説ACでも良いからどんどん解いていくようにしたら、自然と、少しずつではあるけど、自力でACできるようになっていきました。

「ABCは自力で解けなくてもただ知らなかっただけの典型だと思って解説ACする」っていう気持ちでやれば、解けない問題と当たっても落ち込むことはないし、逆に「今まで逃してた典型一つ知れた!」ってなって精進のモチベも続くと思います。

水diffの問題を解いていったのですが、あまり精進に時間が取れなくなってしまったので、時間対効果の高そう典型90もやってみました(星5まで)

これもよかったです。
個人的には、ある程度解説ACでも良いから水diffの問題をいくつか解いてみた上で典型90をやった方が知識として吸収しやすいと思います。


そんなこんなで、現在のDifficulty Piesはこんな感じになりました。

えらい

現在のProgress Chartはこんな感じです。

まとめ

水コーダーになるためにやったことを簡単にまとめると

  • 水diffの問題を解説ACでいいから解いた

  • 典型90を星5までやった

の二つです。
この二つを言うためにこんなダラダラ話したの?


また、

緑コーダーになった時に使えていた代表的なアルゴリズムは

  • DFS

  • DP(ちょっと)

  • 二分探索

  • 累積和


で、水コーダーになった今は

  • DFS(BFSばっか使うようになって逆に前よりできなくなったかも)

  • DP(そこそこ)

  • 二分探索

  • 累積和

  • BFS

  • UnionFind

  • ダイクストラ

  • ワーシャルフロイド法

とかです。

流石にもっとあると思うんですけど、私がアルゴリズム!だと認識してるのはこれぐらいです。


Tips

水コーダーになるために一番使えたTipsを紹介します

解けない問題(見覚えのない問題, グラフっぽくはない問題)はDPだと思い込んで遷移を考えることに徹する

です。

どうせ初見アルゴリズムは解けないから、遷移さえ思いついたら解けるDPに絞って考察するの結構重要な気がする、しらんけど。



おわりに

以上が私の入水記事になります
少しでも私の記事がお役に立てば嬉しいです!!!

最後に、
TwitterXで仲良くして下さっている皆さんや、解説記事など、AtCoderに関連するすべての皆さんのおかげで入水することができました!
本当にありがとうございました!!🙇


また来月記事を書くので読んでもらえると嬉しいです。

現時点での予定タイトルは『クリスマスという困難を乗り越えるためのベストプラクティス』です。


「改めて」ありがとうございました!!!!



おまけ

ちょっと物足りなかったのでおまけとしてマシュマロに来てた質問を返そうと思います。(順番は質問が来た順です)


質問① 「AtCoderのレートがインターンの応募に役立つか」

レートが役に立ったかはわからないです…
でも、AtCoderは確実に役に立ったと思います。

実際に何社かインターンのESを出したんですが、その中で1社を除いてすべて『AtCoderの色を書く欄』がありました。
(資格を書く欄は1社もなかったけど)

なので、企業の人もAtCoderを重要視しているんだなと思います。
でも正直、『レートが役に立ったか』と言われると怪しいです。

逆に『レートで不利になる』場合の方が多い気がします。

ESに資格の有無よりもレートを書かせるぐらいには、AtCoderは一般的になってしまっているので、どんな企業に申し込むとしても『(私レベルだと)自分よりレートの高い人』が大量(募集人数よりは多いはず)にいます。

なので、『役立つぐらいのレート』を持ってる人以外の人にとって『レート』が直接役立つかはわからないです。(進次郎構文)

レートよりも、「AtCoderを通じて何を学んだか」や「AtCoderをやっているということ自体」の方が圧倒的に強みになるかなとは思います。

(知らんけど)


質問② 「AtCoderを始めたきっかけ」

そもそも私がAtCoderの存在を知ったのは大学に入ってからでした。

大学用のTwitterXのTL毎週末、聞きなれないAtCoderという文字列が流れてくるのでそれで存在を知りました。

学部2年になるタイミングで情報系の学科に進むことになったのですが、プログラミングをしたことすらなかったので、春休みに練習として少しやってみたのがきっかけです。

なので、私がプログラミングを始めて学んだ教材はAPG4bです
APG4bはプログラミング始める全人類におすすめしたいですね、かなり。


質問③「モチベを保つ方法」

楽しい!!!!
と思い込むことです()

この記事でも貼ってるんですが、

これおすすめです

あとTwitterXで競プロerと繋がって引くに引けない(辞めれない)状態にするのもおすすめです


質問④「入水おめでとう!」

ありがとうございます!!!

(このマシュマロ来てから3回入水逃したけどな😇)


質問⑤「ガチ恋してる乃木坂メンバーって誰?」

入茶記事で書いたことですかね??

乃木坂の新四期生の佐藤璃果さんです!!

友達に連れてかれた乃木坂のライブで席が前から2か3列目だったんですが、その時に目の前で踊ってくれて心掴まれました。(乃木坂のこと何も知らない状態で行ったからメンバーの名前も知らなかった。)
家に帰ってその子のことを調べてみたら、高専出身で、プログラミングをしてたらしくて、『えっ…これは…』ってなって今に至ります。

ちなみにLiKafって名前の由来でもあります()


質問⑥「毎日の精進は何をしてますか?」

かなりムラがあるんですが、灰diffを解く時もあれば、ABCで解いてない水diffを解いたりもします。

さっきも載せたけど

ここ二ヶ月ぐらいはインターンとかがあったり、他にやることがあったりして、私は常人なので正直精進ほとんどできてなかったです。生き証人意気消沈(SATORUもびっくり)


質問⑦「入青断食愉しみ」

愉しまないでください😙

ちなみに卒論がやばいので卒論が終わる春まではAtCoderを休止するつもりです(時々気分転換で問題解いたりはするし、Unratedは出るかも)

おしゃれすぎない?

悲しまないでください😉

ちなみにダイエットする予定なので断食はします(記事にしようかな〜)


質問⑧「早解きのコツとかある?」

うーん、、意識して練習とかはしてないんですが、純粋にタイピング速度が大事な気がします。

まず、HHKBを買ってください。

コツというほどのことはないんですが、

int N;
cin >> N;
vector<int> A(N);
rep(i, N) cin >> A[i];

とかの典型入出力とか、

グラフだ!ってなったら

vector<vector<int>> G(N, vector<int>(0));
rep(i, N){
    int a, b;
    cin >> a >> b;
    G[a-1].push_back(b-1);
    G[b-1].push_back(a-1);
}

こういうコードを書きながら考えるとか、そういうのがいいと思います。


質問⑨「次の目標は?」

とりあえず卒業研究を死ぬ気でやって満足いくものを書き上げることと、ダイエットです。

頑張ります🍜


質問①⓪「黄色のアイコンになったら黄色まで目指すんですか?」


当然です()


質問①①「AtCoderを0からやり直すなら何からするか」

茶から緑になる上で一番効いたことは「DFSとDPをある程度解けるようにすしたこと」だと思います、というかそれです。

私は大学の講義でこれをやっていたので、特に詰まることなく緑になれたんだと思ってます。


AtCoderを1からやるなら、『解ける問題』をできるだけ多く解く
と思います。

A問題だけでもいいので、1日10問以上といていたら、数週間後にはかなり成長できると思います。

A問題, B問題, C問題は似たような問題が多いと思うので、これを多く解く練習をすることで、思考の仕方とか、コーディングの練習にもなって、早解き対策もできると思います。(質問⑧で言えば良かった。)


質問①②「研究テーマは?」

専門は自然言語処理です。

テーマは今後多少軌道修正があるかもしれないので詳しくは言えないんですが、大きく捉えると『小説生成』に関連するテーマに取り組んでいます。

最近読めてないんですが、小説が好きだったりしたのでこのテーマに取り組んでる感じです。


そもそも『いい文章』を読むのが好きだったりします。
文学的にいい文章とかに限らず、「なんかこの人の文体好き」みたいなのあるじゃないですか。ただの文字の並びなのに面白さが伝わるってすごいことだと思ってます。
そういう文章書けるようになりたいですねぇえ(なんの話ですか?)


おわり!!!

おわりです!!
ここまで読んでくれた人、絶対良いことあるよ🤪

さいなら!!!

この記事が気に入ったらサポートをしてみませんか?