##はじめに
AtCoderの過去問B問題をRubyで解いてみました。
よろしくお願いします。
問題はこちらから確認してください↓
##B - Trained?
問題のシチュエーションに理解が苦しみましたが、、、w
とりあえず入力を受け取ります。
n = gets.to_i
a = readlines.map(&:to_i)
続いて、答えとなる変数countと、光っているボタンを表す変数on_btnを用意します(変数の名前をつけるのが本当に苦手です)
はじめに光っているボタンは必ずボタン1なのでon_btnには1を代入しておきます
n = gets.to_i
a = readlines.map(&:to_i)
on_btn = 1
count = 0
on_btnが2になったら処理を終了させるwhile文を書きます。
実際に配列aで光っているボタンを表すときはa[on_btn-1]
となります。
添字(インデックス数)は0から数えますからね。
ボタンを押すたびにon_btnの値を光るボタンの値に書き換えていきます。
n = gets.to_i
a = readlines.map(&:to_i)
on_btn = 1
count = 0
while on_btn != 2
count += 1
on_btn = a[on_btn-1]
end
この記述ではボタン2が光らない場合の処理が書かれていないので無限ループする可能性があります。
n(aの要素の数)以上countが大きくなる場合は配列aの中に2が存在していないか、2はあるけど2を通らない処理を繰り返しているかのどちらかです。
ですのでcountとnが同じ値になった時点で-1を出力させて処理をbreakで抜け出します。
n = gets.to_i
a = readlines.map(&:to_i)
on_btn = 1
count = 0
while on_btn != 2
count += 1
on_btn = a[on_btn-1]
if count == n
puts -1
break
end
end
あとはcountを出力すれば完成です。
if文でcountがnよりも小さい数で処理が終わっていればcountを出力させます。
n = gets.to_i
a = readlines.map(&:to_i)
on_btn = 1
count = 0
while on_btn != 2
count += 1
on_btn = a[on_btn-1]
if count == n
puts -1
break
end
end
if count < n
puts count
end