https://www.acmicpc.net/problem/1018
import sys
# with open("./data.txt", "r") as file:
# def input():
# return file.readline().strip()
def input():
return sys.stdin.readline()
N, M = map(int, input().split(" "))
result = []
maps = []
for _ in range(N):
maps.append(list(input()))
for y in range(N-7):
for x in range(M-7):
white = 0
black = 0
for a in range(y, y+8):
for b in range(x, x+8):
# 짝수인 경우 무조건 첫 칸의 색깔과 같아야함
if((a + b) % 2 == 0):
# 반대색을 칠하는 이유는, 첫 블록의 색과
if(maps[a][b] == 'W'):
black += 1
if(maps[a][b] == 'B'):
white += 1
else:
# 홀수인데 같은 색을 칠하는 이유는, 다시 칠해야 함을 표시하기 위해서
if(maps[a][b] == 'W'):
white += 1
if(maps[a][b] == 'B'):
black += 1
result.append(white)
result.append(black)
print(min(result))
이번 문제는 첫 브루트포스 문제인데 막혀서 해설을 보며
어떤 식으로 흘러가는건지 파악해봤다.
//해설을 봐도 한참동안 이해가 안됐다. 허허
제일 이해가 안됐던 부분이 아래처럼 다른 색의 수를 올려주는 부분이었는데.
if((a + b) % 2 == 0):
if(maps[a][b] == 'W'):
black += 1
if(maps[a][b] == 'B'):
white += 1
이미 같은 색이라면 다시 칠할 필요가 없기 때문이다.
같은 색의 수를 올려야 몇번 다시 칠해야 하는지 아는데
이미 정상이라면? 같은 색의 수를 올릴 필요가 없기 때문에 그냥 반대색을 올려주는것.
if((a + b) % 2 == 0)
에서
White면 if(maps[a][b] == 'B')
이것만 필요하고
Black이면 if(maps[a][b] == 'W')
이것만 필요한데
양쪽 호환을 위해서 그냥 해놓는거다.
아무튼 이런 느낌이구나