0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-04-27

はじめに

Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC274のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

A - Batting Average

a-274.rb
a, b = gets.split.map(&:to_f)
- s = (b / a).round(3).to_s
+ s = b.fdiv(a).round(3).to_s

- puts s + "0" * (5 % s.size)
+ puts sprintf("%0.3f", s)

解説

1.0や0.0だと桁数が足りないので出力するときに調整しています。

B - Line Sensor

b-274.rb
# 修正前
h, w = gets.split.map(&:to_i)
array = Array.new(h){ gets.chomp.chars }.transpose
count = []
array.each do |factor|
  count << factor.count("#")
end
puts count.join(" ")
b-274.rb
# 修正後
h, w = gets.split.map(&:to_i)
array = Array.new(h){ gets.chomp.chars }.transpose
puts array.map{ |factor| factor = factor.count("#")}.join(" ")

解説

列で考えるのでtransposeメソッドを使って、行と列を入れ替えています。

C - Ameba

c-274.rb
# 修正前
n = gets.to_i
a = gets.split.map(&:to_i)

array = Array.new(2 * n + 1, 1)
array[0] = 0
for i in 1..n - 1
  array[2 * (i + 1) - 1] += array[a[i] - 1]
  array[2 * (i + 1)] += array[a[i] - 1]
end

array.each do |factor|
  puts factor
end
c-274.rb
# 修正後
n = gets.to_i
a = gets.split.map(&:to_i)

array = [0, 1, 1]
for i in 1..n - 1
- array[2 * (i + 1) - 1] = array[a[i] - 1] + 1
- array[2 * (i + 1)] = array[a[i] - 1] + 1
+ array[2 * (i + 1)] = array[2 * (i + 1) - 1] = array[a[i] - 1] + 1
end

puts array

解説

何代親を遡るとアメーバ1になるかを記録する大きさ2*n+1の配列を1で初期化します。ここで、アメーバ1は遡る必要がないのでarray[0]=0としています。後は、順次それぞれのアメーバについて配列の値を更新していくことで実装することができます。

0
0
7

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?