이 내용은 다음의 코드와 같다
// 시작 줄과 열
int s_row = n - 7;
int s_col = m - 7;
for (int i = 0; i < s_row; i++) {
for (int j = 0; j < s_col; j++) {
int count = find(i, j);
answer = Math.min(count, answer);
}
}
이 코드로 예제와 같이 9 * 9의 체스판이 주어졌을때 시작 행과 열이 계속 변경되면서 4번이 총 실행 될 것이다. find 함수는 가장 적게 변할 수 있는 경우의 수가 리턴 될 것이다. answer 의 변수의 경우에는 반복 할 경우에 가장 작은 수를 대입하기 위해 Math함수를 사용하였다.
/**
* 가장 적게 변동되는 갯수 찾기
* @param s_row 시작 줄
* @param s_col 시작 열
* @return 변동되는 최소 개수
*/
private static int find(int s_row, int s_col) {
int count = 0;
int e_row = s_row + 8;
int e_col = s_col + 8;
boolean check = map[s_row][s_col];
for (int i = s_row; i < e_row; i++) {
for (int j = s_col; j < e_col; j++) {
if (map[i][j] == check) {
count++;
}
check = !check;
}
check = !check;
}
return Math.min(count, 64 - count);
}
check 변수의 경우 회차가 지남에 따라 TRUE, FALSE 값이 변경되어 B,W 의 값을 대신 해주며 교차 반복되어 값을 셋팅 해준다. 반전을 했을때를 대비하여 64 - count 를 해주어야한다 왜 64 이냐면 8 * 8 의 값을 대입 해 준 것이다.