0
0

More than 1 year has passed since last update.

RubyでAtCoder ABC235(A, B, C)を解いてみた

Posted at

はじめに

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の先頭から何番目の要素を見たときかを求めることができます。

0
0
0

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