BAEKJOON #1018 체스판 다시 칠하기
2021. 4. 26. 10:21ㆍ개발노트
이 문제의 저작권은 BAEKJOON에 있습니다.
https://www.acmicpc.net/problem/1018
풀이
주어지는 판에서 8 * 8 만큼씩 자른 후 W가 시작점 일 때와 B가 시작점 일 때
바꿔야 하는 칸의 개수를 구하고 그중 최솟값을 구한다.
x, y 축의 값을 더한 값이 홀수일 때와 짝수일 때 항상 같은 색으로 칠해지므로 다른 색으로 칠해진 부분의 값을 카운트한다.
# 체스판 다시 칠하기
# https://www.acmicpc.net/problem/1018
N ,M = list(map(int, input().split(" ")))
bord = []
for _ in range(N):
bord.append(input())
change_num_list = []
# N - 7 만큼 for문으로 반복
# 체스판 크기가 8 * 8 이기 떄문.
for i in range(N - 7):
# M - 7만큼 for문으로 반복
for j in range(M - 7):
w_cnt = 0
b_cnt = 0
for n in range(i, i + 8):
for m in range(j, j + 8):
# 시작점이 W일 때 n + m 이 짝수,
# bord[n][m]이 B면 바꿔야 하는 칸이므로 카운트
if (n + m) % 2 == 0 and bord[n][m] == "B":
w_cnt += 1
# 시작점이 W일 때 n + m 이 홀수,
# bord[n][m]이 W면 바꿔야 하는 칸이므로 카운트
elif (n + m) % 2 == 1 and bord[n][m] == "W":
w_cnt += 1
# 위와 반대로 시작점을 B로 카운트
if (n + m) % 2 == 0 and bord[n][m] == "W":
b_cnt += 1
elif (n + m) % 2 == 1 and bord[n][m] == "B":
b_cnt += 1
# 카운트가 더 작은 값을 리스트에 삽입
change_num_list.append(min(w_cnt, b_cnt))
print(min(change_num_list))