알고리즘/백준

백준 1018: 체스판 다시 칠하기 (Python)

sssbin 2021. 9. 9. 12:24

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

n, m = map(int, input().split())
board = []
cnt = []

for i in range(n):
    board.append(input())

for a in range(n-7):
    for b in range(m-7):
        idx1 = 0
        idx2 = 0
        for i in range(a, a+8):
            for j in range(b, b+8):
                if (i + j) % 2 == 0:
                    if board[i][j] != 'W':
                        idx1 += 1
                    if board[i][j] != 'B':
                        idx2 += 1
                else:
                    if board[i][j] != 'B':
                        idx1 += 1
                    if board[i][j] != 'W':
                        idx2 += 1                 
        cnt.append(min(idx1, idx2))

print(min(cnt))

 

체스판은 맨 첫 칸이 W 또는 B로 시작함

따라서 W로 시작하는 경우와 B로 시작하는 경우로 나눠서 각각 다시 칠해야 하는 개수를 구해 최소값을 출력한다

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 2750: 수 정렬하기 1 (Python)  (0) 2021.09.10
백준 1436: 영화감독 숌 (Python)  (0) 2021.09.09
백준 7568: 덩치 (Python)  (0) 2021.09.08
백준 2231: 분해합 (Python)  (0) 2021.09.08
백준 2798: 블랙잭 (Python)  (0) 2021.09.08