문제 바로가기> 백준 1018번: 체스판 다시 칠하기
브루트포스 알고리즘을 이용하여 풀었다. (8*8 사이의 격자가 움직이며 최소값을 업데이트하는 방식으로!)
이 때 주의해야할 점은 두가지 경우가 있다는 것이다. 첫번째 경우는 첫 문자를 고치지 않는다고 가정하는 경우이고, 두번째 경우(64-첫번째 경우)는 첫번째 문자를 고친다고 가정하는 경우이다.
import sys
N, M = map(int, input().split())
chess = list()
for i in range(N):
chess.append(sys.stdin.readline().rstrip())
ans = 32
for i in range(N-7):
for j in range(M-7):
repaint = 0
begin_chr=chess[i][j]
if begin_chr == 'B':
scnd_chr = 'W'
else:
scnd_chr = 'B'
begin_mod2=(i+j)%2
for k in range(i, i+8):
for l in range(j, j+8):
if (k+l)%2==begin_mod2:
if chess[k][l]!=begin_chr:
repaint+=1
else:
if chess[k][l]!=scnd_chr:
repaint+=1
ans = min(ans, repaint, 64-repaint)
print(ans)