코딩하는 해맑은 거북이

[Python] 체스판 다시 칠하기 - 백준 본문

코딩테스트

[Python] 체스판 다시 칠하기 - 백준

#CJE 2023. 1. 16.
해당 글은 백준 1018번 문제 '체스판 다시 칠하기'를 다룬다.

문제

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

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

 

설명

입력된 보드판에서 8x8 크기의 체스판으로 행과 열을 하나씩 이동해가며 두가지 케이스를 비교하면 된다.

한 행의 8개의 값은 ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'] 또는 ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W']를 가지게 된다.

이러한 두가지 케이스를 비교해서 다르면 +1을 해주고, 나온 모든 경우의 수 중에 최솟값을 출력해주면 된다.

 

코드

n, m = map(int, input().split())
case1 = []
case2 = []
for i in range(m):
    if i % 2 == 0:
        case1.append('W')
        case2.append('B')
    else:
        case1.append('B')
        case2.append('W')

board = []
for i in range(n):
    board.append(list(input()))


sum1 = 0
sum2 = 0
result = []
for r in range(n-7):
    for c in range(m-7):
        sum1, sum2 = 0, 0
        for i in range(r, r+8):
            for j in range(c, c+8):
                if i % 2 == 0:
                    if case1[j] != board[i][j]:
                        sum1 += 1
                    if case2[j] != board[i][j]:
                        sum2 += 1
                else:
                    if case2[j] != board[i][j]:
                        sum1 += 1
                    if case1[j] != board[i][j]:
                        sum2 += 1
        result.append(min(sum1, sum2))

print(min(result))

     

 

 

Comments