0
0

More than 3 years have passed since last update.

[Ruby] AtCoder過去問 B - Trained?

Posted at

はじめに

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

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