LoginSignup
1
0

More than 1 year has passed since last update.

AtCoder 精選過去問を解いてみた Part 3【Ruby】

Last updated at Posted at 2021-07-11

【AtCoder 精選過去問を解いてみた Part 3】

何番煎じかわかりませんが、@drkenさんのAtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~をRを解いてみました。

詳細な解説は、@drkenさんの記事を参照ください。
LGTM6000超えの優良記事です。

Rubyを用いて、過去問を解きました。
解答に誤りなどありましたらご指摘いただけますと幸いです。

第7問 : ABC 085 B - Kagami Mochi (200点)

問題文
X段重ねの鏡餅(X ≥ 1)とは、枚の円形の餅を縦に積み重ねたものであって、どの餅もその真下の餅より直径が小さい(一番下の餅を除く)もののことです。
例えば、直径10、8、6センチメートルの餅をこの順に下から積み重ねると3段重ねの鏡餅になり、餅を一枚だけ置くと1段重ねの鏡餅になります。
あなたはN枚の円形の餅を持っていて、そのうちi枚目の餅の直径はdiセンチメートルです。
これらの餅のうち一部または全部を使って鏡餅を作るとき、最大で何段重ねの鏡餅を作ることができるでしょうか。

制約
・1 ≤ N ≤ 100
・1 ≤ di ≤ 100
・入力値はすべて整数である。

Ruby
# 整数の入力
n = gets.to_i
ans = n.times.map { gets.to_i }
# 「何段積み上げられるか」を出力
# uniqメソッド:配列から重複を取り除く
puts ans.uniq.length

第8問 : ABC 085 C - Otoshidama (300点)

問題文
日本でよく使われる紙幣は、10000円札、5000円札、1000円札です。
以下、「お札」とはこれらのみを指します。
お年玉袋にはお札がN枚入っていて、合計でY円だったそうですが、嘘かもしれません。
このような状況がありうるか判定し、ありうる場合はお年玉袋の中身の候補を一つ見つけてください。
なお、お年玉袋は十分大きかったものとします。

制約
・1 ≤ N ≤ 2000
・1000 ≤ Y ≤ 2×10の7乗
・Nは整数である。
・Yは1000の倍数である。

Ruby
# スペース区切りの整数の入力
n, y= gets.chomp.split.map(&:to_i)
# ありえない場合の初期値:-1
xi, xj, xk = -1, -1, -1
# nまで繰り返す。
(0..n).each do |i|
    (0..n - i).each do |j|
       if i * 10000 + j * 5000 + (n - i - j) * 1000 == y
        xi, xj, xk = i, j, n - i - j
       end
    end
end
# 出力
puts "#{xi} #{xj} #{xk}"

第9問 : ABC 049 C - Daydream (300点)

問題文
英小文字からなる文字列Sが与えられます。
Tが空文字列である状態から始め、以下の操作を好きな回数繰り返すことで、S = Tとすることができるか判定してください。

 ・Tの末尾に dream dreamer erase eraser のいずれかを追加する。

制約
・1 ≤ |S| ≤ 10の5乗
・Sは英小文字からなる。

Ruby
# データの入力
s = gets.chomp.to_s
# %w:配列を要素はスペース区切りで作る。
# gsub:マッチした部分をすべて置換
%w(eraser erase dreamer dream).each{ |w| s = s.gsub(w," ") }
s = s.gsub(" ","")
# 出力
puts s == "" ? "YES" : "NO"

おわりに。

今回は、第10問は解くのをやめました。
まだまだ理解が浅いので復習します。
その後、第10問を解きます

Part 1【練習〜第3問】
Part 2【第4問〜第6問】

参考

AtCoder に登録したら解くべき精選過去問 10 問を Ruby で解いてみた
AtCoder に登録したら解くべき精選過去問 10 問を Ruby・Crystal の両方で動くコードで解いてみた

ありがとうございました。

1
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
1
0