はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC254のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。
A - Last Two Digits
a-254.rb
puts gets.chomp[1..]
B - Practical Computing
b-254.rb
n = gets.to_i
array = []
for i in 0..n - 1
answer = []
for j in 0..i
if j == 0 || j == i
answer << 1
else
answer << array[i - 1][j - 1] + array[i - 1][j]
end
end
array << answer
puts answer.join(" ")
end
他の方の提出結果を参考にした別解になります。
combinationメソッドを使うことでもっと簡素に書くことができます。
別解
n = gets.to_i
n.times do |i|
puts (0..i).map{ |j| [*1..i].combination(j).size }.join(" ")
end
解説
問題文にある通りにコーディングすることで実装することができます。
C - K Swap
c-254.rb
n, k = gets.split.map(&:to_i)
a = gets.split.map(&:to_i)
b = Array.new(k) { [] }
a.each_with_index do |number, index|
b[index % k] << number
end
b.each do |array|
array.sort!
end
array_after_sort = []
n.times do |i|
array_after_sort << b[i % k].shift
end
puts array_after_sort == a.sort ? "Yes" : "No"
解説
(公式解説を参考にしました)
最初にK飛びごとの要素を取得することで、バブルソートできる形にし、それぞれ配列bに格納します。このとき、bに含まれる各配列は必ず昇順にすることができます。最後に、bの要素をもとの順番に戻したものが、aをソートしたものと一致しているかどうかを判定することにより実装することができます。