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

問題

atcoder.jp

自分の回答

それぞれの色の枚数を数えて、それぞれの色を2枚選ぶ方法を算出して最後に合計を出力している (昨日学習したtallyが役に立つ)

gets
h = gets.split.map(&:to_i).tally
arr = []
h.each do |k, v|
  arr << v * ( v - 1 ) / 2 if v >= 2
end
puts arr.sum

別解

こっちの方が分かりやすいかも

gets
h = gets.split.map(&:to_i).tally
sum = 0
h.each do |k, v|
  sum += v * ( v - 1 ) / 2
end
puts sum