diff --git a/kurisu/src/B145.java b/kurisu/src/B145.java new file mode 100644 index 0000000000000000000000000000000000000000..5b25e545120f783fe1e646a994156ea17f5d42f9 --- /dev/null +++ b/kurisu/src/B145.java @@ -0,0 +1,113 @@ +import java.util.Scanner; + +public class B145 { + public static void main(String[] args) { + final Scanner sc = new Scanner(System.in); + final int bingoSize = sc.nextInt(); + final int drawingTimes = sc.nextInt(); + + final Bingo bingo = new Bingo(bingoSize); + bingo.bingoDrawing(sc); + bingo.punchNumber(drawingTimes, sc); + final int bingoResult = bingo.countBingo(); + + ShowResult result = new ShowResult(); + result.outputResult(bingoResult); + sc.close(); + } +} + + +class Bingo { + private int[][] bingoCard; + private int bingoSize = 0; + + // ビンゴカードのサイズを指定 + Bingo(final int size) { + this.bingoCard = new int[size][size]; + this.bingoSize = size; + } + + // ビンゴの各マスに数字を入力 + final void bingoDrawing(final Scanner sc) { + for (int i = 0; i < bingoSize; i++) { + for (int j = 0; j < bingoSize; j++) { + bingoCard[i][j] = sc.nextInt(); + } + } + } + + // 指定した番号があればその番号のマスをパンチ + final void punchNumber(final int punch, final Scanner sc) { + for (int i = 0; i < punch; i++) { + final int number = sc.nextInt(); + for (int j = 0; j < bingoSize; j++) { + for (int k = 0; k < bingoSize; k++) { + if (bingoCard[j][k] == number) { + bingoCard[j][k] = 0; + } + } + } + } + } + + final int countBingo() { + int bingoCount = 0; + // 横のビンゴの判定 + for (int i = 0; i < bingoSize; i++) { + boolean rowBingo = true; + for (int j = 0; j < bingoSize; j++) { + if (bingoCard[i][j] != 0) { + rowBingo = false; + } + } + if (rowBingo) { + bingoCount++; + } + } + + // 縦のビンゴの判定 + for (int j = 0; j < bingoSize; j++) { + boolean columnBingo = true; + for (int i = 0; i < bingoSize; i++) { + if (bingoCard[i][j] != 0) { + columnBingo = false; + } + } + if (columnBingo) { + bingoCount++; + } + } + + // 左上から右下による斜めのビンゴ判定 + boolean obliqueBingo = true; + for (int i = 0; i < bingoSize; i++) { + if (bingoCard[i][i] != 0) { + obliqueBingo = false; + } + } + if (obliqueBingo) { + bingoCount++; + } + + // 右上から左下による斜めのビンゴ判定 + obliqueBingo = true; + for (int i = bingoSize - 1; i > -1; i--) { + if (bingoCard[i][bingoSize - i - 1] != 0) { + obliqueBingo = false; + } + } + if (obliqueBingo) { + bingoCount++; + } + + return bingoCount; + } +} + + +class ShowResult { + void outputResult(final int inspectResult) { + System.out.println(inspectResult); + } +}