(備忘録)問題解決のための「アルゴリズム数学」〜 2

問題

atcoder.jp

自分の回答

各値段の数をcountし、最後に500円になるパターンを積の法則を利用して算出している。 countを4回やっている部分どうにかしたいけど思い付かなかった

gets
price = gets.split.map(&:to_i)
a = price.count(100)
b = price.count(200)
c = price.count(300)
d = price.count(400)
puts (a * d) + (b * c)

他の方の回答

tallyはself に含まれる要素を数え上げた結果を Hash で返している。(何回か見ている気がする)

Enumerable#tally (Ruby 3.1 リファレンスマニュアル)

ddは全読みをしているらしい

AtCoder に登録したら解くべき精選過去問 10 問を Ruby で解いてみた (しえる版) - Qiita

h=`dd`.split.tally
p (h["100"]||0)*(h["400"]||0)+(h["200"]||0)*(h["300"]||0)