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

단간단간·2024년 3월 26일
0

알고리즘 문제

목록 보기
16/106

출처 : https://www.acmicpc.net/problem/1018

python

def function():
    # N: 세로 길이 / M: 가로 길이
    N, M = map(int, input().split())

    board = []
    for _ in range(N):
        board.append(list(input()))

    # board_b: 처음 'B'부터 시작될 경우 각 수정이 필요한 영역 표시 (수정이 필요하면 1, 아니면 0)
    # board_w: 처음 'W'부터 시작될 경우 각 수정이 필요한 영역 표시 (수정이 필요하면 1, 아니면 0)
    board_b = [[0 for i in range(M)] for j in range(N)]
    board_w = [[0 for i in range(M)] for j in range(N)]

    for i in range(N):
        for j in range(M):
            # board_b의 경우 'B'가 되는 영역 / board_w의 경우 'W"가 되는 영역
            if (i + j) % 2 == 0:
                if board[i][j] == "W":
                    board_b[i][j] = 1
                else:
                    board_w[i][j] = 1
            # board_b의 경우 'W'가 되는 영역 / board_w의 경우 'B"가 되는 영역
            else:
                if board[i][j] == "B":
                    board_b[i][j] = 1
                else:
                    board_w[i][j] = 1

    # 'B'로 시작하는 경우와 'W'로 시작하는 경우 모두 비교하여 최솟값 찾기
    min_value_b = 64
    min_value_w = 64

    for k in range(N - 7):
        for j in range(M - 7):
            temp_b = 0
            temp_w = 0

            for i in range(k, k + 8):
                temp_b += sum(board_b[i][j : j + 8])
                temp_w += sum(board_w[i][j: j + 8])

            min_value_b = temp_b if temp_b < min_value_b else min_value_b
            min_value_w = temp_w if temp_w < min_value_w else min_value_w

    print(min(min_value_b, min_value_w))


if __name__ == "__main__":
    function()
profile
simple is best

0개의 댓글