はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC298のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。
A - Job Interview
a-298.rb
n = gets.to_i
s = gets.chomp.chars
puts s.include?("o") && !s.include?("x") ? "Yes" : "No"
解説
問題文の通りに実装すればOKです。
B - Coloring Matrix
b-298.rb
n = gets.to_i
a_array = Array.new(n) { gets.split.map(&:to_i) }
b_array = Array.new(n) { gets.split.map(&:to_i) }
4.times do |i|
flag = true
n.times do |j|
n.times do |k|
flag = false if a_array[j][k] == 1 && b_array[j][k] != 1
end
end
if flag
puts "Yes"
exit
end
a_array = a_array.reverse.transpose
end
puts "No"
解説
4回の操作で元に戻るので繰り返すのは4回だけで大丈夫です。また、回転は、reverseメソッドとtransposeメソッドを使って再現しています。
C - Cards Query Problem
c-298.rb
n = gets.to_i
q = gets.to_i
boxes = Hash.new{|h, k| h[k] = []}
cards = Hash.new{|h, k| h[k] = []}
q.times do
t, i, j = gets.split.map(&:to_i)
case t
when 1
boxes[j] << i
cards[i] << j
when 2
boxes[i].sort!
puts boxes[i].join(" ")
when 3
cards[i].uniq!
cards[i].sort!
puts cards[i].join(" ")
end
end
解説
(他の方の提出結果を参考にしました)
箱に関する情報とカードに関する情報を保持する配列をそれぞれboxes、cardsとして用意していき、問題文の通りに情報を更新していくことで実装することができます。なお、cards[i].uniq.sort.join(" ")
のように書くとTLEしてしまいます。破壊的メソッドを使うことでTLEは解消できるようです(データのコピーのせいで時間超過になってしまうのかな?)。