paizaでAランク達成までにやったこと
こんにちは、atomです。
paizaがどんなサービスか?という内容はこちらにまとめてあるので、スキルチェックについて「?」という人はご覧ください。
ちなみにBランクまでのステップはこちらにまとめています。
この記事では、Aランクに到達するまでに必要と感じることをまとめています。いまpaizaで勉強中の方の助けになれば幸いです。
Bランク編と同じく、
Aランクを「どんなコードが書ける状態」として捉えるか
学習の中でAIをどう使うと効率が良いか
という視点で書いていきます。
paizaのAランクの目安
Aランクの目安ですが、
「Bランク以上のコード力 + 探索アルゴリズムについての知識」
という印象です。
Bランクまでの話をおさらいすると、
冗長な書き方をなるべく防ごうとしてる
関数分割やライブラリ活用ができている
可読性が高いコードを書こうとしている
というように基本的な文法は押さえてて、かつ、可読性が高いコードを書いてる(書こうとしてる)レベルです。
Aランクから求められること
ここから一段レベルが上がり、次のような要素が追加で必要になります。
幅優先探索(BFS)・深さ優先探索(DFS)などの探索アルゴリズムを理解し、自分で実装できる
グラフ探索・最短経路・動的計画法など、「パターンとしてのアルゴリズム」を問題に当てはめられる
つまりAランクは、「文法がわかる人」から「状況に応じてアルゴリズムを適切に使える人」に進むラインだと考えています。
といっても分厚いアルゴリズム本をカバーtoカバーで読む必要はなく、paizaラーニング内でアルゴリズムに関する講座が十分に用意されているのでそこを押さえていくのが良いです。
Aランク達成までにやったこと
ここからは実際に自分がB→Aランクまでに意識して勉強中取り組んだことを書きます。
1.基本的なアルゴリズムの確認
Aランクからは迷路の中で特定の条件を満たしつつ最短経路を測る、みたいな探索アルゴリズムの知識を前提としてる問題が基本になってきます。
私はこのアルゴリズムの理解が甘く、「やってることは説明できるけど、いざコードに書くと散らかって実装できない」という状況だったので他人の実装しているコードを観察しつつ、自分で小規模なケースを想定して一つずつ動作を丁寧に確かめていきました。
たとえば
from collections import deque
Q = deque()
Q.append(['m', 'n'])
print(Q)という感じで処理としてはキューを利用するためにcollectionsライブラリをインポートして、キューに値を入れたものをprintで確認してるだけなのですがこれくらい基本的なレベルから動作を確認しました。
ちゃんと実行する前にはどういう結果が返ってくるか想定して、ズレがないかを確かめます。
2.よくある処理のスニペット作り
Bランクまでは余裕で時間内に間に合うのであまり意識することがないですが、採点はテストケースの突破(50点)と提出までにかかった時間(50点)で行われています。
問題は設定された時間内で解き終わって提出までいかないと点数が減点されて99点とかそんな悔しい思い(実体験)をしてしまうので、時間の節約になる工夫の手札は用意しておきましょう。
例えば問題の入力値としてN,Mの二つが与えられる時
input_line = input()
N, M = input_line.split()
N, M = int(N), int(M)と書いて受け取ることもできるけど、
N, M = map(int, input().split())のようにmapを使った方がシンプルでそんなに手を動かさなくていいので楽です。こういうスニペットをどんどんつくっていきます。
上で書いた利点の他に、コピペで使えばタイポも防げるので毎回自前で書いて「ミスってプログラムでエラーがでてイライラ。。」みたいなことも防げて精神衛生的にも○。
3.テストケースの想定、計算量の意識
これは体感ですが、BランクよりAランクの問題の方が問題設定が複雑なせいで境界値周りの処理に気づかない点があったり、計算時間がオーバーするようなことがちらほらでてくるような気がします。
たとえばpythonだと16秒計算にかかるとそのテストケースは×がついて減点です。
自分のプログラムで行ってる計算量がO(k^2)なら減らす方法がないのかなど考えてみるのがいいと思います。
とはいえ、そこまでシビアな問題設定がされていることもないですが。
AIの活用方法
※paizaのスキルチェックではAIの使用は禁止です。
あくまでインプットの段階、復習の段階で効率を上げるための方法を紹介しています。
1. 基本アルゴリズムについて小規模な問題を作ってもらう
paizaの問題や解説でパターンに触れる
解説を閉じて、自分の手だけで同じアルゴリズムを1から書いてみる
というサイクルを繰り返して自分で実装できるようにしたいので、
「
幅優先探索アルゴリズムを使って解く問題を作ってください。
以下の点を守ってください。
・初学者でも解ける難易度設定にしてください
・〇〇の言語で解いた場合の解説をつけてください。
」
という感じで問題を作って、解くことを自信がつくまで繰り返すのがいいと思います。
2. 境界値、計算量についてチェックしてもらう
上の勉強方法と組み合わせるのがいいと思います。
1.で書いたプロンプトに追加で「境界値が複雑になるような問題設定にしてください」などを付け足して問題作成を行い、それを解きましょう。
最小値・最大値などの境界ケース
入力制約ギリギリのサイズ(Nが最大、文字列が最長など)
などの対策になります。
その上で自分のコードをAIにレビューしてもらって、処理にミスがないか、あるならどう考えればよかったかというのを学んでいきます。
計算量についても同様です。
まとめ
paizaのAランクは、「文法を覚えた人」が「アルゴリズムを使いこなす人」に変わるためのひとつの目安です。
体感としてAランクからゴールド、プラチナのスカウトも含めて増えてくるので頑張ってAランクまでは取っておきましょう。
基本を抑えればそう難しくありません。
たぶん。


コメント