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

Posted at

はじめに

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

A - Move Right

a-247.rb
puts "0" + gets.chomp[0..2]

B - Unique Nicknames

b-247.rb
n = gets.to_i
array = Array.new(n){ gets.split }
hash = array.flatten.tally

array.each do |s, t|
  if s != t && hash[s] != 1 && hash[t] != 1
    puts "No"
    exit
  end
end
puts "Yes"

解説

flattenメソッドとtallyメソッドを使ってそれぞれの名前が何回現れたかを連想配列hashにもたせます。そして、問題文にある条件を満たしているかどうかを判定することで解くことができます。

C - 1 2 1 3 1 2 1

c-247.rb
n = gets.to_i
ans = "1"
2.upto(n){ |i| ans = "#{ans} #{i} #{ans}" }
puts ans

解説

Nが16以下と小さいので、"1"で初期化したansを順番に更新していけば答えが求まります。

D - Cylinder

d-247.rb
q = gets.to_i
que = []
q.times do
  t, x, c = gets.split.map(&:to_i)
  case t
  when 1
    que << [x, c]
  when 2
    ans = 0
    while x > 0
      s, t = que.shift
      remove_count = [t, x].min
      ans += s * remove_count
      x -= remove_count
      t -= remove_count
      que.unshift([s, t]) if t > 0
    end
    puts ans
  end
end

解説

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

1)1のとき
xと書かれたボールをc個右側に入れるので、配列queの末尾に[x, c]を追加します。
2)2のとき
取り出したボールの数がxとなるまで、取り出したボールに書かれていた数字の総和を求めます。

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?