백준 1018 체스판 다시 칠하기 (파이썬)
브루트포스 단계의 문제 중에 가장 고민했던 문제였고 아래 블로그를 참고하여 풀었다😢
참고 블로그 : https://god-gil.tistory.com/62
접근 방식
- 보드의 크기에 상관없이 모든 8*8 크기를 확인하여 잘못 칠해진 개수를 체크하고 그 중 최소값을 출력해야한다.
- 4중 for문을 통하여 전체 보드에서 만들어질 수 있는 8*8 크기를 모두 체크한다.
- 체스판이 제대로 칠해졌는지는 행과 열의 합이 짝수인지 홀수인지 구분하여 체크하였다.
파이썬 코드
n, m = map(int,input().split())
board = list()
num = list()
for _ in range(n):
board.append(input())
for i in range(n-7):
for j in range(m-7):
w = 0
b = 0
for k in range(i, i+8):
for l in range(j, j+8):
# 행과 열의 합이 짝수일 때
if (k + l) % 2 == 0:
if board[k][l] != 'W':
w = w + 1
if board[k][l] != 'B':
b = b + 1
else:
if board[k][l] != 'W':
b = b + 1
if board[k][l] != 'B':
w = w + 1
num.append(w)
num.append(b)
print(min(num))