import java.util.*;
class MultiArrEx2 {
public static void main(String[] args) {
final int SIZE = 5;
int num = 0;
int[][] bingo = new int[SIZE][SIZE];
Scanner scanner = new Scanner(System.in);
initBingo(bingo); // 배열의 모든 요소를 1부터 SIZE*SIZE까지의 숫자로 초기화
shuffle(bingo); // 빙고판(bingo)안의 모든 요소의 위치를 임의로 바꾼다.
// initTest(bingo); // 테스트할 수 있게 빙고판을 설정한다.
do {
printBingo(bingo); // 빙고판을 출력한다.
System.out.printf("1~%d의 숫자를 입력하세요. 빙고:%d(종료:0)>", SIZE * SIZE, checkBingo(bingo));
num = getUserInput(scanner); // 사용자로 부터 값을 입력받는다.
findNum(num, bingo); // 입력받은 숫자와 같은 숫자가 저장된 요소를 찾아서 0을 저장
} while (num != 0);
} // main의 끝
private static int getUserInput(Scanner s) {
String tmp = s.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장
return Integer.parseInt(tmp); // 입력받은 문자열(tmp)를 숫자로 변환
}
private static void findNum(int num, int[][] bingo) {
outer: for (int i = 0; i < bingo.length; i++) {
for (int j = 0; j < bingo[i].length; j++) {
if (bingo[i][j] == num) {
bingo[i][j] = 0;
break outer; // 2중 반복문을 벗어난다.
}
}
}
}
private static void printBingo(int[][] bingo) {
for (int i = 0; i < bingo.length; i++) {
for (int j = 0; j < bingo[i].length; j++)
System.out.printf("%2d ", bingo[i][j]);
System.out.println();
}
System.out.println();
}
private static void initBingo(int[][] bingo) {
for (int i = 0; i < bingo.length; i++) {
for (int j = 0; j < bingo[i].length; j++) {
bingo[i][j] = i * bingo.length + j + 1;
}
}
}
private static void shuffle(int[][] bingo) {
// 배열에 저장된 값을 뒤섞는다.(shuffle)
for (int i = 0; i < bingo.length; i++) {
for (int j = 0; j < bingo[i].length; j++) {
int x = (int) (Math.random() * bingo.length);
int y = (int) (Math.random() * bingo.length);
// bingo[i][j]와 임의로 선택된 값(bingo[x][y])을 바꾼다.
int tmp = bingo[i][j];
bingo[i][j] = bingo[x][y];
bingo[x][y] = tmp;
}
}
}
private static int checkBingo(int[][] bingo) {
// bingo체크
int gCnt = 0; // 가로 빙고체크를 위한 변수
int sCnt = 0; // 세로 빙고체크를 위한 변수
int cCnt = 0; // 대각선 빙고체크를 위한 변수
int cCnt2 = 0; // 반대 대각선 빙고 체크를 위한 변수
int bingoCnt = 0;
for (int i = 0; i < bingo.length; i++) {
gCnt = 0;
sCnt = 0;
for (int j = 0; j < bingo.length; j++) {
if (bingo[i][j] == 0)
gCnt++;
if (bingo[j][i] == 0)
sCnt++;
if (i == j && bingo[i][j] == 0)
cCnt++;
if (i + j == 4 && bingo[i][j] == 0)
cCnt2++;
}
if (gCnt == 5)
bingoCnt++;
if (sCnt == 5)
bingoCnt++;
}
if (cCnt == 5)
bingoCnt++;
if (cCnt2 == 5)
bingoCnt++;
return bingoCnt;
}
private static void initTest(int[][] bingo) {
for (int i = 0; i < bingo.length; i++)
for (int j = 0; j < bingo[i].length; j++)
bingo[i][j] = 0;
bingo[0][0] = 1;
}
}