본문 바로가기
백준

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

by 헤이즐넛 좋아하는 개발자 2024. 3. 18.

1. 문제와 예제

문제
예제 (아래 5개의 예제가 더 있음)


2. 코드

import sys
input = sys.stdin.readline

# 입력 받기
N, M = map(int, input().split())
res = []

# 보드 2차원 배열로 만들기
# ex. board = ['WBWBWBWB', 'BWBWBWBW', 'WBWBWBWB', ...]
board = []
for _ in range(N):
    board.append(input().rstrip())

# (i, j)를 기준으로 8*8 배열에 대해
for i in range(N-8+1):
    for j in range(M-8+1):
        # 다시 칠해야 하는 정사각형의 최소 개수
        cnt = 0
        for r in range(i, i+8):
            for c in range(j, j+8):
                if ((r+c) % 2 == 0):
                    if (board[r][c] != 'W'):
                        cnt += 1
                else:
                    if (board[r][c] != 'B'):
                        cnt += 1
        # 왼쪽 상단이 W인 체스판을 기준으로 개수를 셌으므로 왼쪽 상단이 B인 체스판아 기준일 때랑 비교해야 함
        res.append(min(cnt, 64-cnt))

print(min(res))

3. 풀이

예제 2를 활용해서 생각했다. 8*8 배열을 잡아서 확인하는 과정을 반복한다는 점을 생각하면 코드를 구현할 수 있다.