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

Posted at

はじめに

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

A - Power

a-283.rb
a, b = gets.split.map(&:to_i)
puts a ** b

B - First Query Problem

b-283.rb
gets
a = gets.split.map(&:to_i)
q = gets.to_i
q.times do
  t, k, x = gets.split.map(&:to_i)
  case t
  when 1
    a[k - 1] = x
  when 2
    puts a[k - 1]
  end
end

解説

問題文の通りに実装すればOKです。

C - Cash Register

c-283.rb
s = gets.chomp
n = s.size
s = s.split("00").join
m = (n-s.size) / 2
puts s.size + m

解説

<方針と実装方法>
例えば、s=16000020であったとします。このとき、操作としては1->16->1600->160000->1600002->16000020のように計6回の操作が必要となります。
ここで、00を押したとき100倍とする操作は他のボタンと異なる操作なのでこれで切り分けることを考えます。splitメソッドを使って、切り分けると16000020は1620となります((もとのsの大きさ-切り分けた後のsの大きさ)/2=00を押した数)。また、切り分けた後のs大きさは00以外のボタンを押す回数と一致します。以上のことから、これらの数を足した値が答えとなります。

D - Scope

d-283.rb
s = gets.chomp.chars
arr = []
hash = {}
s.each do|i|
    case i
    when "("
        arr << i
    when ")"
        until arr[-1] == "("
            a = arr.pop
            hash[a] = false
        end
        arr.pop
    else
        if hash[i]
            puts "No"
            exit
        end
        hash[i] = true
        arr << i
    end
end
puts "Yes"

解説

(他の方の提出結果を参考にしました)
与えられた文字列の要素それぞれに対して以下の操作を行うことで実装することができます。

1."("のとき
arrayに格納します。
2.")"のとき
arrayの末尾が"("となるまで要素を取り除き、連想配列hashにおけるそのkeyに対応するvalueをtrueにします。
3.小文字のとき
文字が箱(hash)に入っていればNoを出力して終了し、入っていなければtrueにしてarrayに格納します。最後まで、探索できればYesを出力します。

終わりに

D問題が解けませんでした...
また、C問題は実装に工夫が必要で苦手な系統の問題でした。めげずに頑張っていきましょう!

0
0
1

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?