はじめに
本記事では筆者がPaizaでSランク(上位3%)になるために実施した勉強方法を共有しようと思います。
使用している環境
- python3(3.11.9)
勉強方法
以下の手順で学習を行いSランクを達成しました。
- 文法事項の理解
- 競プロの問題に慣れる
- 競プロの定石を知る
- Sランク問題をひたすら解く
それぞれ具体的に解説していきます。
文法事項の理解
以下の書籍を使って基本的な文法を理解しました。
難易度としては「スッキリわかる」 < 「新明解」だと思います。
プログラミング初学者の方は「スッキリわかる」を、ある程度プログラミング経験のある方は「新明解」のテキストを使って学習を進めるとよいかと思います。
PaizaでSランクを取るためにはテキストの内容を完璧に理解する必要はなく、標準入出力、if文for文while文、リストに関する内容がわかっていればおおむね問題ないように感じました(あくまでSランクを達成するという目的に限った話です)
一部、競プロ特有の記述方法があるため、面食らう場面もあるかと思いますが、その都度覚えていけば事足りるかなと思います。
例(半角区切りで与えられた数値をint型でリストに格納する処理)
# 入力
# 1 2 3 4 5
lst = list(map(int, input().split()))
# 出力
# [1, 2, 3, 4, 5]
print(lst)
map関数を使った処理やリスト内包表記、スライス式等は多くの場面で活用するのであらかじめある程度の知識を持っておく方が理解が容易かもしれません。
競プロの問題に慣れる
さて、文法事項に慣れてきた後は、競プロの問題を解いていきましょう。
まずはPaizaのサイトにアクセスして、アカウントの作成を行いましょう。
問題はDランクからSランクまで5段階存在します。まずは一番ランクの低いDランクから初めて徐々に高ランクの問題に挑戦するとよいかと思います。
Paizaでは、あるランクの問題を1問でも完答できたらそのランクに認定されます(Bランクの問題を1問完答すればBランクに認定される)
そのため、自分の実力プラスαくらいのランクの問題を解いてランクアップに挑戦していくとよいかと思います。
一度間違えた問題は再挑戦できますので、何が間違っていたのかを考えて再挑戦するとよいかともいます(再挑戦で完答した場合、ランクアップはしません)
しばらく問題に挑戦していると、競プロの考え方が身につくとともにB~Aランクくらいに到達できるかと思います(挑戦した問題によってはその限りではないかもしれません)
AランクからSランクにかけて、徐々に自力でアルゴリズムを考えてコーディングをしていくという手法では問題が解けなくなってくる可能性が高いです。
特に実行制限時間超過によって不正解になってしまうことが出てくるかと思います。
筆者の場合はAランクで頭打ちになったように感じたので、書籍を購入して競プロの定石を覚えることにしました(もちろん人によってはすんなりSランクに行く人もいるかと思いますが)
競プロの定石を知る
さてここから先は競プロにおける定石を覚えて、効率の良いアルゴリズムを作成する必要が出てきます
筆者は以下の書籍を参考に学習を進めました
いわゆる蟻本と呼ばれるやつです
ちなみに2章の初級編の章を一通り学習するだけでSランクに到達できました(簡単とは言っていない)
蟻本を読み始めてから、プログラムにおける計算量の考え方を学べたり、自分が書いているコードのどの部分がどれだけの計算量を必要としているのか、計算量を減らすためにどのような工夫が考えられるのか等、プログラム作成に対する向き合い方が変わったりしたため、購入してよかったと感じています。
本書の読み方ですが、基本的に問題を自分の頭でかんがえるということはしていません
そもそも競プロにおける定石を知らないままでここまできてしまったので、まずは定石を理解するためにコードに目を通すことから始めました。
本書のコードはC++で書かれているので、アウトプットとしてコードをpythonで書き直して実行確認するということだけ行いました
また、本書を読み進めていく中で理解できない内容に遭遇した際はアルゴリズム名でweb検索をしたりyoutubeで検索したりして理解できる状態を作りました
Sランク問題をひたすら解く
さて、ここまでくればSランクの問題を解くのに必要な武器は一通りそろっているはずです。
ひたすら問題を解いてSランクを目指しましょう
これまでは問題を見て愚直にコードを書くだけの方法で問題を解いていましたが、与えられた制約からどの程度の計算量のアルゴリズムを考える必要があるのか、また、自分の知っているアルゴリズムのうちどのアルゴリズムを使えば問題が解決できそうかということが何となく浮かぶようになっていました。
ただ、実際に解答してみると、プログラムのバグ等の理由ですぐにSランクになることはできず、Sランクの問題を5問ほど解いた末に完答することができ、無事Sランクになることができました
これからやりたいこと
今後はAtCoderというサイトを使って精進していきたいと考えています。
AtCoderの記事も書いていけたらと思いますのでよろしくお願いいたします。