체스판은 8 X 8 = 64칸이고 N, M의 최댓값은 50이다. 한 칸씩 조건에 맞나 확인해봐도 시간 제한에 걸리지 않을 것이다.
8 X 8로 자른 조각의 가장 첫 번째 칸을 변수에 저장해놓고 각 행, 열마다 조건을 달리하여 확인한다. 0, 2, 4, 6번째 row에서는 0, 2, 4, 6번째 col에 위치한 칸이 첫 번째 칸과 같아야 하고, 1, 3, 5, 7번째 row에서는 0, 2, 4, 6번째 col에 위치한 칸이 첫 번째 칸과 달라야 한다.
R, C = map(int, input().split())
chessBoard = [input() for _ in range(R)]
minRet = 987654321
def checkChessBoard(row, col):
ret = 0
firstSquare = chessBoard[row][col]
for i in range(row, row + 8):
if i % 2 == 0:
for j in range(col, col + 8):
if j % 2 == 0 and chessBoard[i][j] != firstSquare:
ret += 1
elif j % 2 == 1 and chessBoard[i][j] == firstSquare:
ret += 1
else:
for j in range(col, col + 8):
if j % 2 == 0 and chessBoard[i][j] == firstSquare:
ret += 1
elif j % 2 == 1 and chessBoard[i][j] != firstSquare:
ret += 1
if ret > 32:
ret = 64 - ret
return ret
for i in range(R - 7):
for j in range(C - 7):
ret = checkChessBoard(i, j)
if ret < minRet:
minRet = ret
print(minRet)
첫 번째 칸이 W인 체스판, 첫 번째 칸이 B인 체스판 두 종류를 미리 선언해놓고, 비교했으면 더 편했을듯?