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

Last updated at Posted at 2023-06-04

はじめに

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

A - Jogging

a-249.rb
def f(a, b, c, x)
  return b * (a * (x / (a + c)) + [a, x % (a + c)].min)
end

a, b, c, d, e, f, x = gets.split.map(&:to_i)
d_takahashi = f(a, b, c, x)
d_aoki      = f(d, e, f, x)
puts d_takahashi > d_aoki ? "Takahashi" : d_takahashi < d_aoki ? "Aoki" : "Draw"

B - Perfect String

b-249.rb
s = gets.chomp

puts s != s.upcase && s != s.downcase && s.chars == s.chars.uniq ? "Yes" : "No"

解説

条件を言い換えると、sが英大文字または英小文字からなることから、「小文字が含まれない」は「すべて大文字」、「大文字が含まれない」は「すべて小文字」となります。これは、upcaseメソッドとdowncaseメソッドを使って判定することができます。また、すべての文字が相異なるかどうかはuniqメソッドを使って判定することができます。

C - Just K

c-249.rb
n, k = gets.split.map(&:to_i)
array = Array.new(n){ gets.chomp.chars }

ans = 0
1.upto(n) do |i|
  array.combination(i) do |selected_str|
    hash = selected_str.flatten.tally
    ans = [ans, hash.values.count(k)].max
  end
end
puts ans

解説

combinationメソッドを使ってそれぞれの場合に対して探索します。また、含まれるそれぞれの文字の数はtallyメソッドを使って算出しています。そして、countメソッドを使ってK個となる文字は何種類あるか数え上げ、最大値を更新していくことで本問題は解くことができます。

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?