##はじめに
AtCoder過去問のB問題をRubyで解いてみました。
よろしくお願いします。
問題はこちらから確認してください。↓
##B - Foods Loved by Everyone
はじめに入力を受け取ります。
n, m = gets.split.map(&:to_i)
a = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}
2行目は二次元配列で受け取っています。入力例1を例にすると
[[2, 1, 3], [3, 1, 2, 3], [2, 3, 2]]
といったように受け取ります。
配列aの中のそれぞれの配列の先頭(インデックスで0番目)の数字は好きな食べ物の数を表しているだけです。好きな食べ物を表しているわけではないので、邪魔になります。消しましょう。
n, m = gets.split.map(&:to_i)
a = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}
a.each do |i|
i.delete_at(0)
end
これでそれぞれの先頭の数を消せました。入力例1では現在aは下記のようになっているでしょう。
[[1, 3], [1, 2, 3], [3, 2]]
続いて、この配列aの中身を一つに結合したいです。
flattenメソッドを使って一次元配列にします。
n, m = gets.split.map(&:to_i)
a = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}
a.each do |i|
i.delete_at(0)
end
flat_a = a.flatten
これで一次元にできました。
入力例1でいえばflat_aは下記のようになっているでしょう。
[1, 3, 1, 2, 3, 3, 2]
あとは1~mの数字がそれぞれがこの配列の中に何個あるかを調べます。そしてその個数と人数が同じだったら全ての人が好きであるということなのでその場合、変数ansに+1します。
最後にansを出力して完成です。
n, m = gets.split.map(&:to_i)
a = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}
a.each do |i|
i.delete_at(0)
end
flat_a = a.flatten
cnt = 0
(1..m).each do|j|
if flat_a.count(j) == n
cnt +=1
end
end
puts cnt