はじめに
AtCoder過去問のc問題をRubyで解いてみました。
よろしくお願いします。
問題はこちらから確認してください↓
C - Lower
まずは入力を受け取ります。
2行目は配列として受け取ります。
このあと繰り返し処理を行い、繰り返した回数をカウントしたいので変数cntを用意して0を代入します。
また、続けて移動できた回数を配列の中で記録していくので配列cnt_aryを用意しておきます。
n = gets.to_i
h = gets.split.map(&:to_i)
cnt = 0
cnt_ary = []
timesメソッドを使ってn回繰り返します。ブロック変数を用意して配列の先頭から順番に処理をしていくようにします。
if文で指定した数字がその右隣以上の数字であれば移動できるのでcnt+1します。連続で移動できる限りはcnt+1し続けます。
移動できなくなったところでcnt_aryにcntを入れて、cntを0にリセットします。
n = gets.to_i
h = gets.split.map(&:to_i)
cnt = 0
cnt_ary = []
n.times do |i|
if i != n-1 && h[i] >= h[i+1]
cnt += 1
else
cnt_ary << cnt
cnt = 0
end
end
h[i+1]はiが繰り返しの最大値の時に存在しないのでi != n-1
という条件式も含めておきます。
timesで出来上がったcnt_aryの中の一番大きい要素が移動できる回数の最大値となります。
n = gets.to_i
h = gets.split.map(&:to_i)
cnt = 0
cnt_ary = []
n.times do |i|
if i != n-1 && h[i] >= h[i+1]
cnt += 1
else
cnt_ary << cnt
cnt = 0
end
end
puts cnt_ary.max