n, m = map(int, input().split())
board = []
result = []
for _ in range(n):
board.append(input())
for i in range(n - 7):
for j in range(m - 7):
draw_type1 = 0 # 시작이 블랙
draw_type2 = 0 # 시작이 화이트
for a in range(i, i + 8): ## 8x8 보드 추출
for b in range(j, j + 8):
if (a + b) % 2 == 0: #a,b는 0부터 시작하는 인덱스 이므로 홀수칸을 의미
if board[a][b] != 'B':
draw_type1 += 1
else:
draw_type2 += 1
else:# 짝수칸
if board[a][b] != 'W':
draw_type1 += 1
else:
draw_type2 += 1
result.append(draw_type1)
result.append(draw_type2)
print(min(result))#제일 작은 결과
해당 난이도에 비해 어려운 문제 였다고 생각한다.
문제의 핵심은 n x m보드를 8x8 보드로 쪼갤 수 있는 경우의 수를 다 고려하여 계산하는 것 이다.
쪼개고 나면 처음에 블랙칸인경우와 화이트칸 인경우 두가지 경우를 고려해서 한번에 두개의 결과를 구해준다.
그 중 가장 최소값을 출력하는 되는것이다.
댓글 영역