プログラミング学習サイトのpaizaのスキルチェックでぎりぎりSランクが取れたので、そこまでの経緯を書いてみます。
Sランクが取れた問題の結果
paizaスキルチェックとは
paizaのスキルチェックとは競技プログラミングのように指定の問題に対して、入力値を元に処理を実装し、凡そ10個くらいのテストケースで正しい結果が出るプログラムを作成するものです。
また回答までの時間も点数にかかわってきます。
どうやってランクを上げるの?
解答時の点数に応じてどのランクに該当するかが決まります。
低いランクだと100点満点でなくともランクアップできますが、Sランクは100点じゃないとランクアップしないようでした。
筆者は一度Sランク問題で結果が99点だったためランクが上がると思ってましたが、上がりませんでした。
私の経歴
下記に経歴を書いていますが、歴の長い経験者です。
高校
情報処理科でCOBOLを学ぶ。
専門学校
ゲームプログラミングを専攻。
C言語、C++、VBを学び、独学でC#を学習。
入学と同時に基本情報を取得し、2年目の春に現在の応用情報を取得する。
社会人
主に派遣やSESを行っている会社を3社ほど経験。
言語は主にJavaやPHPを使用してWebアプリケーションを作成。
途中ブランクはありますが、凡そ10年くらいはIT業界でプログラミングを行っています。
paizaでやったこと
仕事での経験はJavaやPHPでのWebプログラミングが多かったですが、これからの時代AIのプログラミングスキルがないと厳しいと感じ、完全無料だったこともありPythonの文法を学習しました。
そのため、スキルチェックもすべてPython3で解きました。
#スキルチェックの感想
よく書かれていますが私なりの各ランクの所感は以下の通りです。
Dランク
入力値を四則演算、またはその応用をすればすぐ解ける感じ。
凡そ1分台で解ける問題がほとんど
Cランク
入力値に対してif文、またはfor分で値を加工できれば簡単に解ける。
Bランク
ちょっと考えて処理を書く必要がある。
Aランク
このあたりからif文、for分、配列などを使って、かなり考えて処理を組まないといけない印象。
変なバグにはまると時間がどんどんなくなっていき、テストはすべてOKでも時間切れでランクアップしないこともあった。
Sランク
巷では簡単との評判もあるが、まず問題を読んでどんな結果が欲しいのか考えるまでの時間が結構かかる。
問題によって難しさの差が激しすぎるため、簡単な問題に当たればクリアできることもあるが、大体の問題が計算量の意識がないとタイムオーバーで失敗に終わることが多い。
なんでスキルチェックを行ったのか?
12月上旬終わりごろから諸事情により長期のお休みをしているため、休みの間に自分のプログラミング力に自信をつけるため取り組みました。
自信をつけるために始めたはずがSランクの問題は難しすぎて心が折れそうな場面がありました。
Sランクを取るまでにやったこと
Bランクまでは特に詰まることなく解答することができました。
Aランクは最初の問題がテストはすべて通ったのですが、時間が大幅に規定時間をオーバーしてしまい、ランクを取ることができませんでした。
次のAランク問題では計算量に悩まされタイムオーバーしてしまうコードを最初書いてしまったため、強引に計算量を減らしランクを取ることができました。
そのままの勢いでSランクの問題に望みましたが、選んだ問題が悪かったのか全く処理の糸口が見えず、挫折しました。
そこからアルゴリズム力を鍛えないとSランクは取れないと感じたため、たまたま以前別の目的で購入していたプログラミングコンテストチャレンジブック [第2版]の2章の基礎編までを読みながら、途中のソースコードをpythonに置き換えてコーディングしました。
その後Sランクの問題に再度挑戦し、一度目は惜しくも99点でSランクが取れませんでしたが、上記のSランクが取れた問題で100点を取ることでSランクになることができました。
正直『プログラミングコンテストチャレンジブック [第2版]』の内容のほうは基礎編でもかなり難しく、ここまでを完全に理解できればすぐにSランクが取れると思います。
逆に完全に理解していなくても競技プログラミングとしてのコードを書く力は養われます。
ただ私が挑戦したSランクの問題は定番のアルゴリズムを使わなくても考えて解ける問題が多かったため、必ずしも定番のアルゴリズムを身につけなくてもSランクを取るだけであれば可能かと思います。
この先どうするか
paizaでのSランク獲得を目標にしており、達成したため次の目標を少し迷っていますが、候補としては以下のような物を考えています。
- AtCoderのレーティングを上げる
- Kaggleに挑戦してみる
まとめ
IT業界で活躍するプログラマーであればそこまで苦労せずAランクくらいまでは上がれると思います。
Sランクは問題の難易度に差があり、相性もあるので失敗した問題の分析をちゃんと行い、挫折せずにチャレンジし続ければSランク獲得できると思うので頑張ってください。