0
0

More than 1 year has passed since last update.

[Ruby] AtCoder過去問 C - Lower

Posted at

はじめに

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
0
0
2

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