##はじめに
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
これで完成です。