7月5日に開催されたAtCoder Beginner Contest 173。
A問題の復習。
A - Payment
問題文
お店で N 円の商品を買います。
1000 円札のみを使って支払いを行う時、お釣りはいくらになりますか?
ただし、必要最小限の枚数の 1000 円札で支払いを行うものとします。制約
- 1≤N≤10000
- N は整数
入力
入力は以下の形式で標準入力から与えられる。
N出力
お釣りの金額を整数で出力せよ。
提出したコード
n = gets.to_i change = 10000 - n if change < 1000 puts change else puts change - change.to_s[-4].to_i * 1000 end
結果:AC(正解) 実行時間:64 ms
おつりを change = 10000 - n
として、
それが 1000 未満だったらそのまま出力。
1000 以上だったら、千の位の数字 × 1000 を引いて、出力。
意外と苦戦。無理やりACしたけどあまりよろしくないコード。
もっといいコード
n = gets.to_i change = 1000 - n % 1000 puts change == 1000 ? 0 : change
これが書きたかった。
n(商品の値段)を 1000 で割った余りは、商品の値段の1000円未満の部分になる。
(1900円の商品を 1000 で割った余りは、900)
なので、その 1000円未満の部分を 1000 から差し引けば、答え。
かと思いきや、n が 1000円などキリのいい数字の場合、 1000 - 0 は 1000 になってしまう。
よって、最後に条件分岐で、change が 1000 の場合は 0 を表示させる。
感想
問題を見たとき簡単な問題だと思ったのになかなかうまくできず、B問題を先に解いたほどだった。
サクッと書けるようになりたい。