https://www.acmicpc.net/problem/1018
https://comain.tistory.com/192 님을 참고했다.
8줄의 w로 시작하는 판과 b로 시작하는 판을 만들고 입력해야할 문제예제와 비교하는 형식의 풀이법이다.
8 8은 고정이니까 그 이후에서 다른 점을 찾아야 하므로 n-7,m-7을 해서 반복문을 돌려준다.
흰 보드판과 검은 보드판은 8 8이므로 반복문을 돌려준다.
그 안에서 검은 보드판 또는 흰 보드판에 단어가 규칙에 따라 같은 단어가 아닐 겅우 카운트값을 증가시킨다. 이후 8 * 8의 최소 값인 64와 비교해 최소값을 출력한다.
package com.example.baekjoon;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
String example[] = new String[n];
for (int i = 0; i < n; i++) {
example[i] = br.readLine();
}
String whiteboard[] = new String[8];
String blackboard[] = new String[8];
for (int i = 0; i < 8; i++) { // 검은 보드
if (i % 2 == 0) {
blackboard[i] = "BWBWBWBW";
} else {
blackboard[i] = "WBWBWBWB";
}
}
for (int i = 0; i < 8; i++) { // 흰 보드
if (i % 2 == 0) {
whiteboard[i] = "WBWBWBWB";
} else {
whiteboard[i] = "BWBWBWBW";
}
}
int min = 64; // 8*8
for (int i = 0; i < (n - 7); i++) {
for (int j = 0; j < (m - 7); j++) {
int wcnt = 0;
int bcnt = 0;
for (int k = 0; k < 8; k++) {
for (int l = 0; l < 8; l++) {
if (whiteboard[k].charAt(l) != example[k + i].charAt(l + j)) {
wcnt++;
}
if (blackboard[k].charAt(l) != example[k + i].charAt(l + j)) {
bcnt++;
}
}
}
min = Math.min(min,Math.min(wcnt, bcnt));
}
}
System.out.println(min);
}
}