먼저 문제를 이해해보자.
# 1018
n, m = map(int, input().split())
board = []
for i in range(n):
lst = list(map(str, input().rstrip()))
board.append(lst)
# 정상적인 체스판 2개 만들기
w = "WB" * 4
b = "BW" * 4
startW = []
startB = []
for i in range(8):
if i % 2 == 0:
startW.append(w)
startB.append(b)
else:
startW.append(b)
startB.append(w)
cnt = 64
for i in range(n-7):
for j in range(m-7):
sw = 0
sb = 0
for k in range(8):
for l in range(8):
sw += int(board[i + k][j + l] != startW[k][l])
sb += int(board[i + k][j + l] != startB[k][l])
cnt = min(cnt, sw, sb)
if cnt == 0:
break
print(cnt)
위 문제는 시간이 오래 걸렸다. 문제를 어떤 방식으로 접근해야하는지에 대한 고민이 있었다.
정상적인 체스판을 먼저 만들어놓고 입력받은 board와 비교하는 방법을 택했다.
처음에는 cnt 값을 지정해주지 않아서 첫번째 8 * 8 사각형만으로 비교가 되어 어려움을 겪었다. 이는 cnt 값을 가장 큰 값인 64로 지정하니 해결되었다.