첫 번째 칸이 검은색인 체스판 chess_B, 첫 번째 칸이 흰색인 체스판 chess_W을 만들어서 일치 여부를 판별한다.
N, M = map(int, input().split())
board = [list(input()) for _ in range(N)]
chess_B = [['B' if not (i % 2) else 'W' for i in range(8)] if not (j % 2) else ['W' if not (i % 2) else 'B' for i in range(8)] for j in range(8)]
chess_W = [['W' if not (i % 2) else 'B' for i in range(8)] if not (j % 2) else ['B' if not (i % 2) else 'W' for i in range(8)] for j in range(8)]
cnt = float('inf')
for i_start in range(N - 7):
for j_start in range(M - 7):
cnt_B, cnt_W = 0, 0
for i in range(i_start, i_start + 8):
for j in range(j_start, j_start + 8):
if board[i][j] != chess_B[i - i_start][j - j_start]:
cnt_B += 1
if board[i][j] != chess_W[i - i_start][j - j_start]:
cnt_W += 1
cnt = min(cnt, min(cnt_B, cnt_W))
print(cnt)
현재 위치의 행과 열을 더했을 때 짝수이면 첫 번째 칸과 같은 색 이어야 하고, 홀수이면 첫 번째 칸과 다른 색 이여야 체스판을 만족한다.
N, M = map(int, input().split())
board = [list(input()) for _ in range(N)]
cnt = float('inf')
for i_start in range(N - 7):
for j_start in range(M - 7):
cnt_B, cnt_W = 0, 0
for i in range(i_start, i_start + 8):
for j in range(j_start, j_start + 8):
if (i + j) % 2: #행과 열의 합이 홀수 일 경우
if board[i][j] == 'B':
cnt_B += 1
else:
cnt_W += 1
else: #행과 열의 합이 짝수 일 경우
if board[i][j] == 'B':
cnt_W += 1
else:
cnt_B += 1
cnt = min(cnt, min(cnt_B, cnt_W))
print(cnt)