AtCoder Beginner Contest 152に参加しました。
開催頻度が高くて嬉しいです。
今回は、ratedのコンテストで初めてC問題をACしました……!
ちょっとだけステップアップしました。
◎レートの変化
C問題を解けたおかげか、ちょっとだけ傾きが大きくなっています。400点ごとに色が変わるそうですが、茶色コーダーにはまたまだ遠そう……50点/月ごとレベルアップしていくと仮定すると(大変雑な仮定ですが)、だいたいあと半年強くらいで次のランクに上がれそうです。学習を続けていけば、年内茶色コーダーは達成できそう。
◎今回解けなかった問題
https://atcoder.jp/contests/abc152/tasks/abc152_d
D問題。条件にあった数字を集計していく問題です。私が詰まったところは「ある整数の先頭の桁を取り出す操作」です。
stringで文字数を数えてから、intに戻して10×文字数で割るか……? そんな計算を埋め込んだら途中でコードがぐちゃぐちゃになるなと焦っていました。
また、集計の段階ではpairとmapが使えそうだなあとぼんやり考えつつ、pairのpも打ち込むことなくコンテストを終えました。
コンテストを終えたあとはまず、youtubeを見ながらコーディングしてD問題をACしました。youtubeを見れば理解できるくらいには慣れてきました。
◎今回学んだこと
①やっかいな操作は関数として取り扱うこと
今回は、「ある整数を入れたときに、先頭の数と最後尾の数を吐き出してくれる関数」を作ることがひとつめのポイントでした。
変数 f (引数){
操作
return 変数に入れて返す数
}
という形を迷わず使えるようにしたいです。
あと「;」忘れはいい加減直さないと駄目だと思います……
②先頭の桁の取り出し方
while文を使ってこんなに簡単に取り出せるんだ……! と、実は今回一番感動したポイントです。nを10で割り続けてwhile(0)でストップをかける、という考え方。今までfor文のループばかり使ってきましたが、whileもこんな風に使えるのですね。
③pairとmap
機能はぼんやりとわかっていても書く段階になると文法がわからなくなってしまうので、ここは繰り返し練習して身につけたいところ。
◎総括
情報処理の方法はぼんやり頭に思い浮かびますが、それを実装するための機能が思いつかなかったり、頭にぼんやりと浮かんでも文法が曖昧で使えなかったりという感じです。
繰り返しコードを書いて動作確認をしてC++の機能を覚え、機能を利用するために正しい文法で記載をできるようにし、また先頭桁の取り出し方など数字いじりの典型的なテクニックを集めていく。それが今からやることです。
テクニックや機能を覚えていくことは時間さえかければできることなので(それはそれで大変ですが……)、今は努力に対してそこそこ成長が見える時期と思っています。
発展的な思考が求められるレベルはまだまだ先。そういう境地までたどり着けると相当楽しそうですが。
まあ、ぼちぼちやっていきます。
あ、あともうちょっとブログ見やすくしたいな……横線入れるとかいい感じにhtmlをいじっていきたい(いつやるかは決めてないのでずっとぐだぐだしそう)。