LoginSignup
0
0

More than 1 year has passed since last update.

[Ruby] AtCoder過去問 A - Candy Distribution Again

Posted at

はじめに

AtCoder過去問A問題をRubyで解いてみました。
よろしくお願いします。

問題はこちらから確認お願いします。↓

A - Candy Distribution Again

まずは入力を受け取ります。

n, x = gets.split.map(&:to_i)
a = gets.split.map(&:to_i).sort

配列の中は昇順に並び替えてaに代入しています。

後ほど繰り返し処理を行なって、繰り返した回数が答えとなるため、変数countを用意して、0を代入します。

n, x = gets.split.map(&:to_i)
a = gets.split.map(&:to_i).sort

count = 0

while文で繰り返し処理をしていきます。
条件は配列の中身がなくなるまで行うようにします。

n, x = gets.split.map(&:to_i)
a = gets.split.map(&:to_i).sort

count = 0

while a[0] != nil

お菓子を最小の数で喜ぶ子供から分け与えていきます。
配列の中は昇順になっているのでshiftメソッドで手前から取り出して削除していきます。
そして処理したらcountに+1します。

さらに全ての子供たちにお菓子を分け与える前に、お菓子が無くなったら、処理を抜け出すように記述します。

n, x = gets.split.map(&:to_i)
a = gets.split.map(&:to_i).sort

count = 0

while a[0] != nil
  x -= a.shift
  count += 1
  if x < 0
    break
  end
end

ここで私がめちゃめちゃハマったんですが、この問題の子供達、自分が要求するお菓子の数ぴったしじゃないと、満足しないらしいです。
つまり10個あげると喜ぶ子供に20個あげると喜ばないんですww

んなことあるかと思いながら、コードを書き直しましたが、、、
常識にとらわれず、ちゃんと問題を読みましょうw

ですので、もし子供が満足する数よりも少なかったり、多かったりした時はcountから-1してあげます。

n, x = gets.split.map(&:to_i)
a = gets.split.map(&:to_i).sort

count = 0

while a[0] != nil
  x -= a.shift
  count += 1
  if x < 0
    break
  end
end

if x != 0
  count -= 1
end

puts count

これで完成です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0