LoginSignup
1
1

More than 1 year has passed since last update.

[Ruby] AtCoder過去問 B - Chocolate

Posted at

はじめに

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

問題はこちらから確認してください↓

B - Chocolate

まずは入力を受け取ります。
aは配列として受け取るようにしています。
答えはチョコの数なので変数chocoに0を代入しておきます。

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

choco = 0

まずは法則を考えます。
私は割り算でこの問題を考えました。

①まず、dをそれぞれの日数で割った時あまりなく、ちょうどで割り切れた場合はチョコを割った答えがチョコを食べた数です。
→この法則は入力例2の一人目や入力例3の最後のひと(6の人)に当てはめて計算してみたらわかります。

②もし、dをそれぞれの日数で割った時、あまりがある場合は割った答え+1がチョコを食べた数です。

③もし入力例1の3人目の人のように10の人はdを超えているので最初の1日目しかチョコを食べることができません。(10日後に食べる予定ですが、その日はこないため)

上記を踏まえてeach文でそれぞれの合宿参加者ごとに、条件分岐し、chocoに追加していきます。

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

choco = 0

a.each do |i|
  if d % i == 0
    choco += d / i
  elsif i <= d
    choco += d / i + 1
  else 
    choco += 1
  end
end

そして最後に余ったxをchocoに追加したら、準備されていたチョコの数が出てきます。

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

choco = 0

a.each do |i|
  if d % i == 0
    choco += d / i
  elsif i <= d
    choco += d / i + 1
  else 
    choco += 1
  end
end

puts choco += x
1
1
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
1
1