0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaを用いて、半年でAtCoderの茶色コーダーになるまで

Posted at

はじめに

 ついに競技プログラミングのサイトであるAtCoderで、茶色コーダーになることができたので、やってきたことなどを記事にまとめました!自慢話でも武勇伝でもなく、茶色コーダーなら継続して大会に参加すれば誰でもなれると思うので、茶色コーダーを目指す方のモチベーションに繋がればと思います。
image.png
↑他の方の入茶記事も少し覗きましたが、私はレートの推移がゆっくりな方みたいですね。

目次

  1. 茶色コーダーについて
  2. 競プロを始める前にやってきたこと
  3. 茶色コーダーになるため学習したこと
  4. まとめ

1. 茶色コーダーについて

 そもそも茶色コーダーとは何かについて、簡単に説明します。AtCoderでは大会の成績によってレートが変動します。そのレートによって色が付き、その人がどのくらいの技量を持っているのかの目安となります。例えると、柔道の帯みたいなものです。 以下が記事を書いた時のRating分布です。横軸がレートで、縦軸がそのレートの人数です。見えづらいですが2800以上は赤色となり、ほぼいません。要するに神様みたいなもんです。
image.png

茶色は色の中でも1番下から2番目になります。それを聞くと、あんまり大したことない感じがしますが、大体上位25% とよく言われています。ちなみにこの記事を書いている2025年9月23日現在ではアクティブユーザが約127,000人いて、茶色コーダーの1番下が35,000位でしたので、大体上位27.5%くらいになりそうですね。下から2番目の色ですが、競技プログラミングを自主的に始める意欲的な人達の中で上位27.5%なら、個人的にはすごいと思っています!

どのくらいの技量が求められるのか

 茶色コーダーになるためにはどのくらいの技量が求められるかですが、茶色の時点で基本的なアルゴリズムの理解は求められると思います。自分の定義になりますが、基本的なアルゴリズムについては後述します。最初は、初心者から参加できるAtcoder Beginner Contest(ABC)というコンテストに参加してレートを上げていくことになります。問題はA問題からG問題まであり、制限時間100分の中で解けるだけ解いてくださいという形式です。茶色コーダーになるには、問題の難易度にもよりますが、C問題まで解くことが求められます。しかし、C問題では計算量を意識しなければならず、アルゴリズムの理解が必須となります。また、B問題では全探索を書けるかどうかが試されますが、こちらを素早く書けるようにならなければいけません。私はAとB問題を体感10分ぐらいで解いていたと思います。 確認したら15~25分くらいでした。個人的にはB問題早時より、C問題を解けるようにしたらレートがかなり上がったので、そのためにも計算量を削減できるくらいの技量は茶色コーダーには求められると思います。

2. 競プロを始める前にやってきたこと

 競プロを始めたのは、大学4年の3月なので、ほぼ社会人になって始めたみたいなものでした。IT系の大学に行って主にPythonを使って、CとJavaのクラスまでの基本を知ってるくらいの知識までは持ってました。なので、始めたばかりでもB問題までは解けてた感じです(時間は割とかかってましたが)。アルゴリズムの知識もなかったので、競技プログラミングを始めてから学んだ形になります。

 競技プログラミングでは数学力があると、有利だったりするのですが私の場合、基礎学力も無いです!数学とか高校時代偏差値50も無かったので、数学的知識が必要とされる問題は全然解けません。そんな私でも茶色まではいけたので、継続力次第だと思います。

3. 茶色コーダーになるために学習したこと

私のAtCoderの勉強のルーティーンは以下になります。

  • 毎週開催されるABCに可能な限り参加する(実際月1回休むくらいでした)
  • ABCの公式解説放送で解けなかったC問題を理解する
  • 月1でアルゴリズムの解説記事を書く
  • 8月から通勤時間はAtCoder Daily Trainingで解法を考えて解説を見る(コーディング無し)

 これ以外には勉強したことはほぼないです。休みの日に問題解くとかは特にやりませんでした。結構Qiitaの記事を書くので精一杯でした。ひたすら問題を解いて慣れる方もいると思うのですが、そこまで私は努力できる方でもないので、量より質でQiitaの記事をしっかり書いてアルゴリズムを理解していました。アルゴリズムじゃない記事を書いていたり、8月は仕事が繁忙期なので記事を出せていなかったりしてますが、こんなやつでも茶色コーダーにはなれるんだと思ってください。ちなみにコーディングはもう少しやった方が良かったと思いました。理由としては、最近は解法が分かるのに実装できないパターンがやや多くなってきたからです。特に再起関数が苦手な人は慣れた方がいいと思うので一緒に頑張りましょう!

 アルゴリズムに重点を置いて話しましたが、解いてきた問題を振り返ってみると、アルゴリズムを知っているかどうかの問題よりも、問題の性質や制約を使って効率的に処理する方法を考えられるかが試されていると感じました。例えば回文が関わる問題では、回文の性質である前半分が決まれば後ろが決まることを利用して計算量を減らせます。アルゴリズムも大事ですが、C問題をたくさん解いたり解説を聞いて慣れていくのが大事だと感じました。

学んだアルゴリズムについて

しっかり記事を書いて理解したものと公式の解説などで理解したものを分けて列挙してみます。茶色になるために、必須と言われているBFS、DFSはまだ実装できないので、ここら辺は来月の記事で書く予定です。

記事を書いて理解したアルゴリズム
  • 尺取り法
  • imos法
  • Union-Find
  • 動的計画法(DP)
理解したアルゴリズム
  • 累積和
  • ランレングス圧縮

 列挙してみると意外と少なかったですね。数学の知識があればそれだけで解けてしまう問題もあるので、数学力のある方はすぐに行けてしまうのではないでしょうか。基本的なアルゴリズムは何かといわれると、私の定義では、累積和, BFS, DFS, Union-Find, imos法, 尺取り法あたりです。 C問題でそれは知らないとできないじゃんって問題は、大体ここら辺のアルゴリズムを抑えておけば解けると思います。

Javaならではの苦労

 大学でPythonばっかり学んできた私ですが、Pythonは実行速度が遅く競技プログラミングにおいて不利に働く可能性があることと、Javaを学んでみたいという気持ちからJavaで挑戦しています。その時の苦労した点は以下3点になります。

  • pythonと違って文字列操作が大変
  • オーバーフローが起きる
  • C++にある組み合わせ列挙とかない

 pythonをずっとやってきたので、変数に型が付いていると違和感を感じていました。今考えるとこの感覚も、相当やばいのですが、Javaに慣れないうちは特に文字列操作で苦戦しました。B問題で文字列操作を求められることが多々あったので、慣れていない言語で挑戦する場合は、文字列操作を予習しておくと早解き出来ると思います!

 オーバーフローはint型に最大値を超える値を入れてしまって桁があふれてしまうことです。競技プログラミングは$10^9$とかすごく大きい数が来るので、制約は気にしておいた方が良いです。特に気にするべき点が、最大値が$10^9$の数が乗算とかされるとすぐにオーバーフローを起こすので気を付けてください。以下記事で紹介されていますが、Javaのint型の最大値は、$10^9$と$10^10$の間にあるため、不安であればlongにしておくのが無難です。私は解けなかった問題を後日、型をlongにしただけで正解だったことが2回くらいあります。 あとはlongでも格納できない場合はBigIntegerという型を使用する必要があるため、Javaで挑戦する方はこの辺りも確認しておくとB問題早解きで役立ちます。

 これはJava以外にも言えるのですが、公式の解説は基本的にC++で行われるので、C++にはあるメソッドがJavaになかったりします。解説でここはC++の標準関数を使ってくださいと言われたときは発狂しました。また、公式がUnion-Findなどのアルゴリズムを集めたパッケージを用意していますが、こちらもC++限定です。なので、あらかじめ自分で関数を作成する必要があったりするので、この辺りもJavaで挑戦するにあたって苦労した点になります。

まとめ

 今回茶色コーダーについてと、私が茶色コーダーになるために行ってきたことを、簡単にまとめました。茶色コーダーになるには、C問題を解くことが重要で、C問題を解くために私は以下のアルゴリズムを学びました。

  • 尺取り法
  • imos法
  • Union-Find
  • 動的計画法(DP)
  • 累積和
  • ランレングス圧縮

 年々AtCoderユーザの実力が上がっていることもあり、1年後にはD問題まで解くことを求められたりするかもしれません。 しかし、忘れてほしくないのは、茶色コーダーは継続していれば誰でも行けるものだということです。レートが下がったり、停滞してもあきらめずに参加し続けることが大事だと思います!こんな私の体験記でしたが、ご高覧いただきありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?