5月2日に開催されたAtCoder Beginner Contest 165にRubyで参加しました。
今日はB問題の復習です。
各問題の制約や入力・出力例はリンク先(AtCoderのサイト)をご覧ください。
B - 1%
問題文
高橋くんはAtCoder銀行に 100 円を預けています。
AtCoder銀行では、毎年預金額の 1 % の利子がつきます(複利、小数点以下切り捨て)。
利子以外の要因で預金額が変化することはないと仮定したとき、高橋くんの預金額が初めて X 円以上になるのは何年後でしょうか。入力
入力は以下の形式で標準入力から与えられる。
X
提出したコード
x = gets.to_i total = 100 n = 0 while total < x total = (total * 1.01).floor n += 1 end puts n
結果:AC(正解) 実行時間:55 ms
考えたことを言語化してみる
1行目:標準入力値を数値に変換して変数 x に代入
2行目:高橋くんの預金額を表すtotalという変数に100を代入
3行目:年数を表す n という変数に0を代入
4〜7行目(while文)
(5行目)1年分の利子を含む高橋くんの預金額を計算しfloor
で切り捨て、totalに再代入
(6行目)年数 n をプラス1する
(4行目)5〜6行目の処理を、total(高橋くんの預金額)が x より小さい間繰り返す
8行目:年数 n を出力
while
は、whileの次に書いた式がtrueの間、次行からendまでの処理を繰り返します。
繰り返し処理といえばRubyではeach
をよく使います。times
もありますが、今回の問題のようにある一定の条件下での繰り返しとなるとwhile
ですね。リファレンスには「制御構造」として載っていました。until
やfor
も使えそうです。
この問題に関しては他の参加者の方々もほぼ同じようなコードだったので、改善後のコードはなしです。
感想
「複利の計算」なら昔習った!と思ったのが間違いでした…。無駄に時間を使ってしまいました。
最終的なコードに関しては、いいコードになったのではないでしょうか。