shiki0331’s blog

Web Developer. TypeScript / React.js を中心に学んでいます。 ブログ内容で間違っている箇所などありましたら、ご指摘していただけると助かります。

競技プログラミングを解こう part2

今回もAtCoderで問題を解いてみました〜

 

なんとか解けました!

 

問題文

高橋くんは、自動販売機でジュースを買ったときの音が好きです。

その音は 1 回 A 円で聞くことができます。

高橋くんは B 円持っていますが、お気に入りの音を C 回聞くと満足するため、B 円で最大 C 回まで聞けるだけ聞きます。

高橋くんはお気に入りの音を何回聞くことになるでしょうか。

制約

  • 入力は全て整数である。
  • 1A,B,C100

入力

入力は以下の形式で標準入力から与えられる。

A B C

出力

高橋くんはお気に入りの音を何回聞くことになるか出力せよ。


入力例 1 Copy

Copy
2 11 4

出力例 1 Copy

Copy
4

高橋くんは 8 円以上持っているのでお気に入りの音を 4 回聞いて満足します。


入力例 2 Copy

Copy
3 9 5

出力例 2 Copy

Copy
3

高橋くんが満足できないこともあります。


入力例 3 Copy

Copy
100 1 10

出力例 3 Copy

Copy
0

atcoder.jp

 

 

 

 

Rubyで解いたので、答えと解説をしていきます。

 

 

 

 

 

 

 

 

まずはA B Cで入力できるようにしていきます。

A,B,C = gets.split.map(&:to_i)

 

次に出力ですね。

入力例 1 Copy

Copy
2 11 4

出力例 1 Copy

Copy
4

高橋くんは 8 円以上持っているのでお気に入りの音を 4 回聞いて満足します。

例1では

1回2円で聞くことができて、4回聞いたら満足します。

2円×4回で8円なので、8円以上あれば満足できます。

11円持っているので4回聞けますね。

 

これは1回の金額×回数の答えよりも、持っている金額が多ければ満足できると言い表すことができます。

 

つまり

if  A * C <= B

    puts   C 

と表現できます。

 

次は1回の金額×回数の答えよりも、持っている金額が少なかった場合に何回聞けるかを考えます。

入力例 2 Copy

Copy
3 9 5

出力例 2 Copy

Copy
3

高橋くんが満足できないこともあります。

 

例2では

1回3円で聞くことができて、5回聞いたら満足します。

3円×5回で15円なので、15円以上あれば満足できます。

しかし、9円しか持っていないので3回しか聞けません。

 

これは、持っている金額➗1回の金額で求めることができます。

 

つまり、

puts B / A

 

組み合わせると

if  A * C  <=  B
   puts C
else
   puts B / A
end

 

これで高橋くんが音楽を聞く回数を求められますね〜

 

わかると楽しいですね!笑

 

少しづつ難しいのもチャレンジしていきます!!