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

Posted at

はじめに

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

A - Double Click

a-297.rb
n, d = gets.split.map(&:to_i)
t = gets.split.map(&:to_i)
t.each_cons(2).each do|i, j|
    if j - i <= d
        puts j
        exit
    end
end
puts -1

解説

each_consメソッドを使って、隣り合う要素の差がd以下であるかを判定しています。

B - chess960

b-297.rb
s = gets.chomp

flag1 = (s.index("B") - s.rindex("B")).odd?
flag2 = s.index("R") < s.index("K") && s.index("K") < s.rindex("R")
puts flag1 && flag2 ? "Yes" : "No"

解説

問題文の2つの条件を満たすかどうかを調べていけば実装できます。

C - PC on the Table

c-297.rb
h, w = gets.split.map(&:to_i)
h.times do
    puts gets.chomp.gsub(/TT/, "PC")
end

解説

TTをPCに置き換えれば良いので、gsubメソッドを使ってすべて置換しています。

D - Count Subtractions

d-297.rb
a, b = gets.split.map(&:to_i).sort

ans = 0
while a != b && a != 0
    ans += b / a
    b %= a
    a, b = b, a if a > b
end
puts ans != 0 ? ans - 1 : 0

解説

愚直にやるとTLEしてしまうので、こういう同じような操作を繰り返して変数を更新していくような問題はmodを使って解いていきます。

終わりに

今回は比較的簡単だったと思います。(参加しとけば...)

<余談>
最近、忘れてしまってAtCoderに参加できていません...。LINE Notifyを使って通知を送るようなサービスを作ってみようかな?

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?