import math
def chess(i, j):
f_w = 0
f_b = 0
for n in range(i, i+8):
for m in range(j, j+8):
if (n+m)%2==0:
if board[n][m] == 'W':
f_b += 1
else:
f_w += 1
else:
if board[n][m] == 'W':
f_w += 1
else:
f_b += 1
return min(f_w, f_b)
n, m = [int(v) for v in input().split()]
board = []
for _ in range(n):
board.append(input())
cnt = math.inf
for i in range(n-7):
for j in range(m-7):
cnt = min(cnt, chess(i,j))
print(cnt)
체스판의 크기는 8*8 크기로 정해져 있으므로 처음에 2중 for문을 돌면서 각 체스판에 대해 바꿔야 하는 색깔의 숫자를 구하며 그 중 제일 작은 값이 문제의 정답이다
각 체스판에 대해 바꿔야 하는 색깔의 숫자는 처음에 W로 시작하는 경우와 B로 시작하는 경우를 따로 구하고 둘 중에 더 작은 값을 return한다.
체스판은 W B W B 이런 식으로 반복하는 패턴이다. list의 세로 줄? 이 바뀐다고 하더라도 두 인덱스의 합이 짝수인 것은 첫 번째 색깔과 같고 홀수인 것은 다르다는 규칙이있다.
이를 토대로 "if (n+m)%2==0" 이 조건으로 W로 시작하는 경우와 B로 시작하는 경우에 대해 바꿔야 하는 색깔의 숫자를 구할 수 있다.
예전에 풀 때는 결국 해결하지 못해 인터넷에서 참고해서 풀었지만 이번에 다시 풀 때는 스스로 해결했다. ^^