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 ABC243(A, B, C)を解いてみた

Posted at

はじめに

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

A - Shampoo

a-243.rb
v, a, b, c = gets.split.map(&:to_i)
sum = a + b + c
puts v % sum < a ? "F" : v % sum - a < b ? "M" : "T"

B - Hit and Blow

b-243.rb
gets.to_i
a = gets.split.map(&:to_i)
b = gets.split.map(&:to_i)
index_equal = a.zip(b).count{ _1 == _2 }

puts index_equal
puts (a & b).size - index_equal

解説

A[i] == B[i]の場合については、zipメソッドとcountメソッドを使うことで求めることができます。次に、A, B両方に含まれるが位置が異なる要素の数については、&を使ってA, B両方に含まれる要素を抽出し、そこから先ほど求めた位置も等しい要素の数を引いたものが答えとなります。

C - Collision 2

c-243.rb
n = gets.to_i
array = Array.new(n){ gets.split.map(&:to_i) }

points = Hash.new{ |h, k| h[k] = [] }
s = gets.chomp.chars
array.zip(s){ |(x, y), c| points[y] << [x, c] }

points.values.each do
  next if _1.size < 2
  _1.sort.each_cons(2) do |(_, l), (_, r)|
    if l == "R" && r == "L"
      puts "Yes"
      exit
    end
  end
end
puts "No"

解説

連想配列を使って、y座標が同じものでグループ分けします。そして、それぞれについてvalueが2つ以上であれば、衝突するものがあるかどうかを調べることにより答えを求めることができます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?