import sys
input = sys.stdin.readline
n, m = map(int, input().split())
li = []
mini = []
for _ in range(n):
li.append(input())
for i in range(n - 7):
for j in range(m - 7):
a = 0
b = 0
for k in range(i, i + 8):
for l in range(j, j + 8):
if (k + l) % 2 == 0:
if li[k][l] != 'W':
a += 1
if li[k][l] != 'B':
b += 1
else:
if li[k][l] != 'B':
a += 1
if li[k][l] != 'W':
b += 1
mini.append(a)
mini.append(b)
print(min(mini))
첫째 줄 n,m 을 입력 받고 li , mini 리스트를 만들어 둔다.
체스판을 반복문을 통해 li 안으로 넣어준다.
브루트 포스 알고리즘 답게 4중 for 문으로 해결해 주었다.
처음 2개의 반복은 n - 7 의 범위를 잡아 8 이상의 어떤 n,m 에서도 범위 설정에서 오류가 나지 않게 한다.
다시 칠해는 최솟값 a,b = 0,0 으로 설정한다.
그 후 2중 반복문 안의 또다른 2중 반복을 통해 8 * 8 크기의 체스판을 확인해 준다.
체스판을 확인하는 방법은
if (k + l) % 2 == 0 으로 2가지 경우,
즉 처음 오는 색이 'W' 인 경우와 else 로 'B' 가 오는 경우를 만든다.
if 문 안에 다시 if 를 넣어 그 자리 알맞은 색상이 아닐 경우 a,b 에 ++1 해주는 방법을 선택했다.
이렇게 a,b 값을 (a == 처음 색이 'B'일 경우 / b == 처음 색이 'W'일 경우) mini 리스트에 넣고
둘 중 작은 값을 출력한다.