B - Sandwich Number Editorial by cirno3153

正規表現を用いた解法

今回のような問題は、正規表現を用いて判定することができます。

fun main() {
  val S = readLine()!!
  println(if (Regex("^[A-Z][1-9][0-9]{5}[A-Z]$").matches(S)) "Yes" else "No")
}

このように、正規表現^[A-Z][1-9][0-9]{5}[A-Z]$を用いると \(S\) が条件を満たすか判定できます。 実際に確認してみましょう。

  • ^は行頭にマッチするので、ここから始まることを示す
  • [A-Z]は任意の英大文字にマッチするので、 \(1\) 文字目と \(8\) 文字目が英大文字であることを示す
  • [1-9]\(1\) 以上 \(9\) 以下の整数にマッチするので、 \(2\) 文字目が \(0\) でない整数であることを示す
  • [0-9]{5}\(0\) 以上 \(9\) 以下の整数が \(5\) 回続くものにマッチするので、 \(3\) 文字目から \(7\) 文字目が整数であることを示す
  • $は行末にマッチするので、ここで終わることを示す

これは、問題文で与えられた条件と等しいです。

なお、次のように書いても今回の制約下では正答となります。

fun main() {
  val S = readLine()!!
  println(if (Regex("""\D[1-9]\d{5}\D""").matches(S)) "Yes" else "No")
}

posted:
last update: