LoginSignup
0
0

More than 1 year has passed since last update.

[Ruby] AtCoder過去問 B - String Rotation

Posted at

はじめに

AtCoder過去問B問題をRubyで解いてみました。
よろしくお願いします。

問題はこちらから確認してください

B - String Rotation

まずは入力を受け取ります。また答えとなる変数ansにNoを代入しておきます。
sとtは一文字ずつを一つの要素とした配列として受け取っています。

s = gets.chomp.chars
t = gets.chomp.chars
ans = "No"

この問題の回転というのがよくわからなかったのですが、一文字ずつずらしていけば、、、っという意味ですね。
つまり、一回の操作は一番最後の文字を先頭に持ってくるということです。
上記の操作をコードにすると下記のようになります。

s.unshift(s[s.length-1])
s.delete_at(s.length-1)

unshiftというメソッドを使用して引数に配列sの末尾の文字を先頭に挿入しています。
このメソッドは引数で指定した要素を削除しているわけではないので、delete_atメソッドで末尾を削除します。

上記のコードを利用してtimesメソッドとif文を作成します。

s = gets.chomp.chars
t = gets.chomp.chars
ans = "No"

s.length.times do
  if s == t
    ans = "Yes"
    break
  else
    s.unshift(s[s.length-1])
    s.delete_at(s.length-1)
  end
end

puts ans

配列sの文字数回timesメソッドで繰り返します。
もし配列sとtが同じになればansの中身をYesに上書きします。同じでなかったら一文字ずらして、比較を繰り返します。

s.length分繰り返してもs==tにならなければansは上書きされていないのでNoが出力されます。

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