LoginSignup
1
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-07-11

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

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

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

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

練習 : A - Welcome to AtCoder

問題文
整数a,b,cと文字列sが与えられます。 a+b+cの計算結果と文字列sを並べて表示してください。

制約
・1 ≤ a,b,c ≤ 1,000
・1 ≤ |s| ≤ 100

Ruby
# 整数の入力
a = gets.to_i
# スペース区切りの整数の入力
b, c = gets.chomp.split.map(&:to_i)
# 文字列の入力
s = gets.chomp
# 出力
puts "#{a+b+c} #{s}"

第1問 : ABC 086 A - Product (100点)

問題文
二つの正整数a,bを見つけました。aとbの積が偶数か奇数か判定してください。

制約
・1 ≤ a,b ≤ 10000
・a,b:整数

Ruby
# スペース区切りの整数の入力(1行に複数の数値が入力された時の鉄板)
a, b = gets.chomp.split.map(&:to_i)
# 偶数奇数を判定する組み込みメソッド
puts (a * b).odd? ? 'Odd' : 'Even'

第2問 : ABC 081 A - Placing Marbles (100点)

問題文
1,2,3の番号がついた3つのマスからなるマス目を持っています。
各マスには0か1が書かれており、マスiにはsiが書かれています。
1が書かれたマスにビー玉を置きます。
ビー玉が置かれるマスがいくつあるか求めてください。

制約
・s1,s2,s3:1あるいは0

Ruby
# N行のデータの入力
n = gets.chomp.to_s
# 「1」をカウントする
puts n.count("1")

第3問 : ABC 081 B - Shift Only (200点)

問題文
黒板にN個の正の整数A1,...,ANが書かれています。
黒板に書かれている整数がすべて偶数であるとき、次の操作を行うことができます。
 ・黒板に書かれている整数すべてを、2で割ったものに置き換える。
最大で何回操作を行うことができるかを求めてください。

制約
・1 ≤ N ≤ 200
・1 ≤ Ai ≤ 10の9乗

Ruby
# N行のデータの入力
n = gets.chomp.to_s
# スペース区切りの整数の入力
a = gets.chomp.split.map(&:to_i)
cnt = 0
# 全てが偶数であるか判定する:all?
while a.all?(&:even?) do
    a = a.map { |t| t / 2 }
    # インクリメント
    cnt += 1
end
# 「2で割れた回数」を出力
puts cnt

おわりに。

この記事の問は、まだ理解がしやすかったです。
以降の問もやっていきます。

Part 2【第4問〜第6問】
Part 3【第7問〜第9問】

参考

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

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

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