[백준/파이썬] 1018번 체스판 다시 칠하기 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 1018번 체스판 다시 칠하기
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
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로 결정되고,
전체 경우 중 최소값을 출력하면 됩니다.
댓글남기기