AtCoder Beginner Contest 109 B

atcoder.jp

結果

一発AC

学んだこと
  • %w(hoge)はカッコ内を展開しない。%W(hoge)はカッコ内を展開する。
  • string[x,x]とか文字列操作に慣れよう
  • 三項演算子に慣れよう
  • breakはループを1つ抜ける、returnは実行中の関数から抜ける
  • なるほど!重複がないということはarray == array.uniq
  • しりとり失敗と分かった時点で処理を中断する(最初に書いたコード)→〇処理量が少なくて済む、×ループ文を書く必要がありコードが長くなる
  • とにかく全体を一気に計算する(修正したコード)→〇コード量が少なくて済む、×2単語目でしりとり失敗と分かっても続きの無駄な処理をしてしまう
  • 一長一短だなあ
最初に書いたコード
n = gets.to_i
flag = true
words = %W(#{gets.chomp})
(n-1).times do |_|
  w = gets.chomp
  if words.include?(w) || words.last[-1] != w[0,1]
    flag = false
    break
  else
    words << w
  end
end
puts flag ? 'Yes' : 'No' 
修正したコード
w = []
gets.to_i.times{w << gets.chomp}
puts w==w.uniq && (0..w.size-2).all?{|i|w[i][-1]==w[i+1][0]} ? :Yes : :No