사용 언어: Java
- 구상
시작 위치와 정방행렬의 크기를 제시하고 숫자 검사
각 수마다 개수를 세는 변수를 선언하고 같은 수로만 채워져 있는 경우에 개수 더하기
- 구현
import java.util.*;
import java.io.*;
public class Main {
public static int[][] arr;
public static int minus = 0;
public static int zero = 0;
public static int one = 0;
public static void main(String[] args) throws Exception {
Scanner s = new Scanner(System.in);
int size = s.nextInt();
//행렬 크기 설정
arr = new int[size][size];
//행렬 입력
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
arr[i][j] = s.nextInt();
}
}
//처음 사이즈부터 검사 및 분할
part(0, 0, size);
System.out.println(minus);
System.out.println(zero);
System.out.println(one);
}
//행렬 자르기
public static void part(int row, int col, int size) {
//같은 수로 되어있다면 카운트하기
if(check(row, col, size)) {
if(arr[row][col] == -1) {
minus++;
}
else if (arr[row][col] == 0)
zero++;
else
one++;
return;
}
//9등분 후, 크기 초기화
size /= 3;
part(row, col, size);
part(row, col + size, size);
part(row, col + size*2, size);
part(row + size, col, size);
part(row + size, col + size, size);
part(row + size, col + size * 2, size);
part(row + size * 2, col, size);
part(row + size * 2, col + size, size);
part(row + size * 2, col + size * 2, size);
}
//같은 수로 되어있는지 확인하기
public static boolean check(int row, int col, int size) {
int num = arr[row][col];
for (int i = row; i < row + size; i++) {
for (int j = col; j < col + size; j++) {
if (num != arr[i][j])
return false;
}
}
return true;
}
}
- 2차원 배열로 정방행렬 입력받고 저장
- 시작 위치와 행렬의 크기를 입력으로 받고 같은 수로 되어있다면 개수를 올림
- 검사가 끝나면 행렬을 9등분하여 각각 재귀호출로 검사 및 개수 올리기
-행렬이 같은 수로 구성되어 있는지 확인하는 메소드 따로 구현 (check)