0件ヒットしました
    2020-06-07

    30代になって始めたAtCoder、Pythonで半年で水色になりました

    競技プログラミングを始めて苦節半年, やっと水色になった. 使用言語はPython. 始めた当時はプログラミング初心者〜初級者といったレベルで, Pythonの基本文法を少し知っている程度だった.

    suinyuu

    トレーニングとしてやったことは2つだけ.

    • 蟻本
    • 過去コンテスト埋め

    まあ誰もがやっていることでしょう.
    ただ, TwitterやQlita界隈の茶〜緑コーダーの方々を見ていると「何のためにそのトレーニングをするのか」を自分なりに考え・理解してやっている人は少ないように感じる.

    「どんな練習でもやらないよりはやった方がまし」は真だが, どうせやるなら効率よくやりたいもの.

    というわけで、上記の練習により何が向上し水色レートという成果に繋がったのか、自分なりの解釈を紹介する.

    水色コーダーに求められる能力は3つ

    唐突だが, 水色コーダーには以下3つの能力が必要だと思っている.

    1. 基本アルゴリズム・データ構造の理解
      BFS/DFS, 二分探索, Union-Find木, etc… とにかく知っていないと問題は解けない.
    2. 競プロ特有の問題解決の思考法
      問題の取っ掛かりを得るための思考方法がいくつもあり, 知っているのと知らないのとでは大きな差が生まれる.
      Ex)「ソートして先頭から/末尾から考える」「2152^{15}程度であれば全探索」「“i番目を使わない”\Leftrightarrow11~i1i-1番目とi+1i+1~NN番目を使う”」
    3. コーディング力
      上記1,2があれば解法は思いつくだろう。しかし、それを速く・正確に実装することが求められる.

    で, これらを鍛えるための蟻本および過去コンテスト埋めなのである。

    蟻本でアルゴリズム・データ構造の能力を鍛える

    言わずもがな、蟻本により能力1の向上が期待できる. 知識として知っていないものは使うことはできない. まずは蟻本に目を通し, 基本アルゴリズム・データ構造のInputから始めることが肝要だ.
    そして, AtCoder 版!蟻本 (初級編)などを活用してOutputも行い, 能力1を身につけていく.

    過去コンテスト埋めで競プロ特有の思考法&コーディング力を鍛える

    ここでよく見かける間違い(と僕が思っている練習法)は, A埋め→B埋め→C埋め→D埋めと簡単な問題から埋めていく方法だ. なぜなら, A-B-C問題というのは上記能力1,2,3への寄与が相対的に少ない. 無駄とは言わないが効率が悪いのだ.

    各レベルの問題を解く際に必要な能力
    (ほぼ不要:🌑 少し要:🌘 要:🌗 とても要:🌕)

    #能力ABCD~E
    1基本アルゴリズム・データ構造の理解🌑🌑🌗🌕
    2問題解決の思考法🌑🌑🌗🌕
    3コーディング力🌘🌘🌗🌕

    上記は僕が考える必要能力と問題難易度の関係だ. AB問題は能力1,2,3いずれもほとんど不要である. 逆に言うと, AB問題をいくら解いたところで能力向上への寄与は僅かなのだ. C問題は幾分かマシだが, やはりD~E問題を解いた方が効果は高い.

    ではどうすれば良いのかと言うと, 僕がオススメするのはコンテスト埋めである. ABC過去コンテストを1回ずつA問題からD(E)問題までやり切り, 過去コンテストを埋めていく.

    contest_ume

    A-B問題はもちろん無駄ではない. ただ, 限られた時間内で効率よく鍛錬するために, D(E)問題も同じペースでACを積み重ねていくのだ.
    この方法により, 能力1,2,3が水色水準に到達するはずだ.

    結論

    もうね, ごちゃごちゃ考えんと, とにかく過去問解きまくったったらええんですよ!