##はじめに
AtCoder過去問B問題をRubyで解いてみました。
よろしくお願いします。
問題はこちらから確認してください↓
##B - 美しい文字列
まずは入力を受け取ります。
w = gets.chomp.chars
一文字ずつ分けて、配列として受け取ります。
入力例1でいえばこのように受け取れているはずです↓
["a", "b", "a", "c", "c", "a", "b", "a"]
countメソッドでそれぞれの文字が配列wの中にいくつあるか調べ、それが偶数個なのかどうかeven?メソッドで調べます。
さらに、全ての種類の文字が偶数個ないといけないので、all?メソッドで上記の条件が全て真の時にtrueを返すようにします。trueであればYesを出力させ、falseならNoを出力させます。
配列wで使われている文字の種類はw.uniq
で表現します。
w = gets.chomp.chars
if w.uniq.all?{ |s| w.count(s).even?}
puts "Yes"
else
puts "No"
end
これで完成です。
このコードを短くしようと試みました。↓
w = gets.chomp.chars.sort
puts (w.uniq.all?{ |s| w.count(s).even?}) ? "Yes" : "No"
あまりこの書き方をしないのですが、1行でかけました。
わかりやすさ的には初めの方が好きです。