##はじめに
AtCoder過去問B問題をRubyで解いてみました。
よろしくお願いします。
問題はこちらから確認してください↓
##B - Nice Shopping
はじめに入力を受け取ります。
今回は少し面倒でした。
a, b, m = gets.split.map(&:to_i)
a_ary = gets.split.map(&:to_i)
b_ary = gets.split.map(&:to_i)
m_ary = []
m.times do |i|
m_ary << gets.split.map(&:to_i)
end
割引券の配列m_aryの中は配列の中に配列を入れています。m_aryの中のそれぞれの配列が割引券一枚の条件を示しています。
割引券を使わずとも一番安い組み合わせが存在する可能性がありますので、price_aryという配列を作って代入しておきます。
a, b, m = gets.split.map(&:to_i)
a_ary = gets.split.map(&:to_i)
b_ary = gets.split.map(&:to_i)
m_ary = []
m.times do |i|
m_ary << gets.split.map(&:to_i)
end
price_ary = [a_ary.min + b_ary.min]
割引券を使った場合の金額もこのprice_aryに入れていきます。
割引券の使った時の金額は例えば1枚目(配列m_aryの先頭)であれば下記のように表せます。
a_ary[m_ary[0][0]-1] + b_ary[m_ary[0][1]-1] - m_ary[0][2]
2枚目(m_aryの2番目も配列)の場合は
a_ary[m_ary[1][0]-1] + b_ary[m_ary[1][1]-1] - m_ary[1][2]
これを利用してtimesメソッドで処理を行います。
割引券の数だけ繰り返すようにして、出来上がった金額はprice_aryに入れていきます。
そして最後にminメソッドでprice_aryの中の一番小さい要素を出力したら完成です。
a, b, m = gets.split.map(&:to_i)
a_ary = gets.split.map(&:to_i)
b_ary = gets.split.map(&:to_i)
m_ary = []
m.times do |i|
m_ary << gets.split.map(&:to_i)
end
price_ary = [a_ary.min + b_ary.min]
m_ary.length.times do |i|
price_ary << a_ary[m_ary[i][0]-1] + b_ary[m_ary[i][1]-1] - m_ary[i][2]
end
puts price_ary.min