백준 1018번: 체스판 다시 칠하기

Seungil Kim·2021년 7월 4일
0

PS

목록 보기
16/206

백준 1018번: 체스판 다시 칠하기\

아이디어

체스판은 8 X 8 = 64칸이고 N, M의 최댓값은 50이다. 한 칸씩 조건에 맞나 확인해봐도 시간 제한에 걸리지 않을 것이다.

8 X 8로 자른 조각의 가장 첫 번째 칸을 변수에 저장해놓고 각 행, 열마다 조건을 달리하여 확인한다. 0, 2, 4, 6번째 row에서는 0, 2, 4, 6번째 col에 위치한 칸이 첫 번째 칸과 같아야 하고, 1, 3, 5, 7번째 row에서는 0, 2, 4, 6번째 col에 위치한 칸이 첫 번째 칸과 달라야 한다.

코드

R, C = map(int, input().split())
chessBoard = [input() for _ in range(R)]
minRet = 987654321


def checkChessBoard(row, col):
    ret = 0
    firstSquare = chessBoard[row][col]
    for i in range(row, row + 8):
        if i % 2 == 0:
            for j in range(col, col + 8):
                if j % 2 == 0 and chessBoard[i][j] != firstSquare:
                    ret += 1
                elif j % 2 == 1 and chessBoard[i][j] == firstSquare:
                    ret += 1
        else:
            for j in range(col, col + 8):
                if j % 2 == 0 and chessBoard[i][j] == firstSquare:
                    ret += 1
                elif j % 2 == 1 and chessBoard[i][j] != firstSquare:
                    ret += 1
    if ret > 32:
        ret = 64 - ret
    return ret


for i in range(R - 7):
    for j in range(C - 7):
        ret = checkChessBoard(i, j)
        if ret < minRet:
            minRet = ret

print(minRet)

여담

첫 번째 칸이 W인 체스판, 첫 번째 칸이 B인 체스판 두 종류를 미리 선언해놓고, 비교했으면 더 편했을듯?

profile
블로그 옮겼어용 https://ks1ksi.io/

0개의 댓글