B問題を正規表現で解いてみる
実装の概要
模範解答ではループで1文字ずつ数字かどうか(あるいはハイフンかどうか)をチェックしていました。
前後の数字の桁数がはっきりa,bと決まっているため特に正規表現の必要はありませんが、練習の意味で意識的に正規表現を使ってみようと思いました。
例えば現実の日本の郵便番号は「(数字3桁)-(数字4桁)」なので、パターン文字列は"\d{3}-\d{4}"となります。なお、実際のコード内ではバックスラッシュはエスケープが必要なので注意しましょう。この数字の部分をa,bに応じて変えることができれば解くことができます。
public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); String[] tmpArray = input.split(" "); int a = Integer.parseInt(tmpArray[0]); int b = Integer.parseInt(tmpArray[1]); String posStr = br.readLine(); String ptnStr = "\\d{"+a+"}-\\d{"+b+"}"; if(Pattern.matches(ptnStr, posStr)){ System.out.println("Yes"); } else { System.out.println("No"); } } }