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

Last updated at Posted at 2023-05-16

はじめに

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

A - Overall Winner

a-301.rb
n = gets.to_i
s = gets.chomp
t = s.count("T")
a = s.count("A")

if t > a
  puts "T"
elsif t < a
  puts "A"
else
  puts s.rindex("T") < s.rindex("A") ? "T" : "A"
end

解説

sに含まれるT, Aの数で場合分けをします。TとAの数が同じである場合には、rindexメソッドを使ってどちらがその数に先に達しているかを判定しています。

B - Fill the Gaps

b-301.rb
n = gets.to_i
a = gets.split.map(&:to_i)

ans = []
a.each_cons(2) do |pre, nxt|
ans << pre
  if pre < nxt
    (pre + 1).upto(nxt - 1) { |i| ans << i }
  else
    (pre - 1).downto(nxt + 1) { |i| ans << i }
  end
  # if文の部分は以下のようにも書ける
  # ans.concat pre.step(nxt, by: nxt <=> pre).to_a[1..-2]
end
ans << a[-1]
puts ans.join(" ")

解説

each_consメソッドを使って、隣り合う要素について差が1となるように要素を追加することで実装することができます。

C - AtCoder Cards

c-301.rb
s = gets.chomp.chars.tally
s.default = 0
t = gets.chomp.chars.tally
t.default = 0
array = %w(a t c o d e r)

("a".."z").each do |c|
  next if s[c] == t[c]
  if s[c] > t[c]
    if s[c] <= t[c] + t["@"] && array.include?(c)
      t["@"] -= s[c] - t[c]
    else
       puts "No"
       exit
    end
  else
    if t[c] <= s[c] + s["@"] && array.include?(c)
      s["@"] -= t[c] - s[c]
    else
      puts "No"
      exit
    end
  end
end
puts "Yes"

解説

(他の方の提出結果を参考にしました)

tallyメソッドを使って、与えられた文字列それぞれに含まれる英小文字の数を保持する連想配列を生成します。そして、@を使うことでsとtに含まれるatcoderの文字いずれかの数を合わせることができるかを調べることで実装することができます。

0
0
2

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?