[BOJ] 1018 체스판 다시 칠하기
이 문제는 규격내에서 8X8 짜리 체스판이 몇개가 나올 수 있는지 규칙을 찾아야한다. 전체 규격에서 8X8짜리 체스판은 (N-7)*(M-7)
개가 나올 수 있다.
시작 좌표는 왼쪽 상단으로 잡는 것이 편하고, 체스판 특성상 첫 색상에 따라서 규칙이 다르게 배열될 수 있기 때문에 첫 칸의 시작 좌표와 첫칸의 색상을 인자로 받는 검사 함수를 하나 작성해준다.
검사 함수에서는 정해진 규격(8X8)에서 시작점이 주어진 첫 칸의 색상과 같은지 확인하는 것으로 시작하여 홀수와 짝수칸을 구분하여 도색이 필요한 칸 수를 누적시킨다.
나의 풀이
import sys
input = sys.stdin.readline
N, M = map(int, input().split(" "))
array = []
temp = 0
ans= 64
for i in range(N):
array.append(input()[0:M])
#규칙이 있음. (N-7) * (M-7)개의 경우의 수가 나옴
#전체 수 파악하기
def count(y, x, bw):
global ans
cnt = 0
for i in range(8):
for j in range(8):
if (i+j)%2:
if array[y + i][x + j] == bw:
cnt +=1
else:
if array[y + i][x + j] != bw:
cnt +=1
ans = min(ans, cnt)
for i in range(N-7):
for j in range(M-7):
count(i, j, 'B')
count(i, j, 'W')
print(ans)