■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。 基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
(5/23時点の方針) メソッドの切り分け方や値の受け渡しを練習するために、コード長の短さについては気にせずに書くことにする。
(2022/10/17時点の方針) しばらくはB問題を小さい番号の方からやっていく。たまにA問題もやるかも。
(2023/11/10メモ) 忙しさにかまけて半年くらい空いてしまった。またA問題からやっていく。
■問題
●出典
AtCoder Beginner Contest 080のA問題 https://atcoder.jp/contests/abc080/tasks/abc080_a
●問題文
駐車場があり、以下の二種類のプランのどちらかを選んで駐車できます。
- プラン 1 : T 時間駐車した場合、A×T 円が駐車料金となる。
- プラン 2 : 駐車した時間に関わらず B 円が駐車料金となる。
N 時間駐車するとき、駐車料金は最小でいくらになるか求めてください。
●制約
- 1≦N≦20
- 1≦A≦100
- 1≦B≦2000
- 入力は全て整数
●入力
入力は以下の形式で標準入力から与えられる。
N
A
B
●出力
駐車料金が最小で x 円のとき、x を出力せよ。
■回答
●愚直に書く
n*a
とb
の小さいほうが解答、ということかな。
n, a, b = gets.split.map(&:to_i)
puts [n*a, b].min
通った!
●メソッド化して書く
メソッドを作る練習のために、あえてそういう書き方をする。 久しぶりなのでやっておくか…! (↑っていう記載が2023/6/22の投稿にもあった汗)
メインメソッド、小さい方を出すメソッド、標準入力を取得するメソッドの3つを作成。
def main
n, a, b = read_nums
puts show_min(n, a, b)
end
def show_min(n, a, b)
[n * a, b].min
end
def read_nums
gets.split.map(&:to_i)
end
main
通った!
●11/13追記
juneboku さんにアドバイスをいただきました、いつも大感謝…!🙏
- show_min メソッドについて、表示は行っていないので show って言わない方がよさそう
→確かに、showしてないなぁと思いました😂
小さい方を「判定」しているのでjudge_min
くらいかな…!
●リファクタリング/別アプローチ
もっと短い書き方あるのかな。 ちょっと思いつかないのでパス。
●他の方の回答例
改行やスペースを省いているかどうかの違いだけで、上位の皆さんも全員同じでした。
●出てきたメソッド等
公式リファレンスを見る訓練。
■振り返りなど
久しぶりで標準入力の取り方も忘れていた。 また定期的にやっていきたい。