はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC235のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。
A - Rotate
a-235.rb
a, b, c = gets.chomp.chars.map(&:to_i)
puts (a + b + c) * 111
解説
abc + bca + cab = (100a + 10b + c) + (100b + 10c + a) + (100c + 10a + b) = 111(a + b + c)
から求めることができます。
B - Climbing Takahashi
b-235.rb
gets
h = gets.split.map(&:to_i)
h << -1
h.each_cons(2){
unless _1 < _2
puts _1
exit
end
}
解説
答えが最後の要素となる場合においても処理が実行されるように末尾に-1
を追加しておきます。そして、each_cons
メソッドを使って隣り合う要素の大小を比較し、左側の要素が右側の要素以上である場合は左側の要素を出力してループを抜けるようにすることで答えを求めることができます。
C - The Kth Time Query
c-235.rb
_, q = gets.split.map(&:to_i)
a = gets.split.map(&:to_i)
hash = Hash.new{ |h, k| h[k] = [] }
a.each.with_index(1){ hash[_1] << _2}
q.times do
x, k = gets.split.map(&:to_i)
puts hash[x][k - 1] || -1
end
解説
連想配列を用意し、そこにkeyを数、valueをaのインデックスとして保持させることで、数xがk回目に登場するのがAの先頭から何番目の要素を見たときかを求めることができます。