[백준/파이썬] 1018번 체스판 다시 칠하기 풀이

업데이트:



문제 정보


풀이

문제

N x M 보드에서 임의의 8 x 8 부분 보드를 선택해 체스판 패턴이 되도록 최소 몇 칸을 칠해야 하는지 구하는 문제입니다.

시작 색이 B인 경우와 W인 경우를 모두 비교해야 합니다.

코드

import sys
n, m = map(int, sys.stdin.readline().split())
floor = [list(sys.stdin.readline()) for _ in range(n)]

cnts = [[0] * ((n-7)*(m-7)) for _ in range(2)]
for i in range(n-7):
    for j in range(m-7):
        for key, pair in {0:('B', 'W'), 1:('W', 'B')}.items():
            for row in range(i, i+8):
                for col in range(j, j+8):
                    if floor[row][col] != pair[((row-i)+(col-j))%2]:
                        cnts[key][i*(m-7)+j] += 1
print(min(min(cnts[0]), min(cnts[1])))

설명

모든 8 x 8 시작 좌표 (i, j)를 순회하고,

  • 시작색 B
  • 시작색 W

두 경우에 대해 다시 칠해야 하는 칸 수를 계산합니다.

각 칸의 기대 색은 (행 오프셋 + 열 오프셋) % 2로 결정되고, 전체 경우 중 최소값을 출력하면 됩니다.



댓글남기기