체스판 다시 칠하기
# 1018
W = [['W','B','W','B','W','B','W','B'],
['B','W','B','W','B','W','B','W'],
['W','B','W','B','W','B','W','B'],
['B','W','B','W','B','W','B','W'],
['W','B','W','B','W','B','W','B'],
['B','W','B','W','B','W','B','W'],
['W','B','W','B','W','B','W','B'],
['B','W','B','W','B','W','B','W']]
B = [['B','W','B','W','B','W','B','W'],
['W','B','W','B','W','B','W','B'],
['B','W','B','W','B','W','B','W'],
['W','B','W','B','W','B','W','B'],
['B','W','B','W','B','W','B','W'],
['W','B','W','B','W','B','W','B'],
['B','W','B','W','B','W','B','W'],
['W','B','W','B','W','B','W','B'],]
N, M = map(int,input().split())
arr = []
for i in range(N):
arr.append(list(input()))
def chess(x,y):
wcnt = 0
bcnt = 0
if x + 8 <= N and y + 8 <= M:
for i in range(8):
for j in range(8):
if arr[i+x][j+y] == W[i][j]:
wcnt += 1
else:
bcnt += 1
return R.append(max(wcnt,bcnt))
R = []
for i in range(N):
for j in range(M):
chess(i,j)
print(64-max(R))
첫 칸이 흰색이거나 검은색인 두 가지 경우의 수만 있다고 해서 먼저 두 가지 케이스를 리스트로
만들어놨다. 그리고 이 케이스를 입력받는 N*M에 한 칸씩 넘어가면서 대조해보고 수정할 값이
가장 적은 것을 가져왔다.
리스트를 만들어서 대조하기 전에 ['W', 'B'] 나 ['B', 'W']같이 짧은 리스트로도 풀 수 있을 거 같은
느낌이지만 어떻게 풀어야할지 생각이 안 나네 다음에 시도해봐야겠다.