백준 1018 체스판 다시 칠하기 (파이썬)


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))





© 2020.09. by 다로

Powered by theorydb