언어, 알고리즘 공부/백준

[백준 알고리즘] 1018번 체스판 다시 칠하기 (Python)

쿠몬e 2020. 4. 17. 18:37

 

<Python>

N, M = map(int, input().split())
chess = [list(input()) for _ in range(N)]
min_cnt = 64
b_start = []
w_start = []
for i in range(8):
    if i % 2 == 0:
        b_start.append(list(['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W']))
        w_start.append(list(['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B']))
    else:
        w_start.append(list(['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W']))
        b_start.append(list(['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B']))

for i in range(N - 7):
    for j in range(M - 7):
        w_cnt = 0
        b_cnt = 0
        # b로 시작하는 체스판과 비교하여 cnt 세기
        for k in range(i, i + 8):
            for s in range(j, j + 8):
                if b_start[k-i][s-j] != chess[k][s]:
                    b_cnt += 1
        # w로 시작하는 체스판과 비교하여 cnt세기
        for k in range(i, i + 8):
            for s in range(j, j + 8):
                if w_start[k-i][s-j] != chess[k][s]:
                    w_cnt += 1
        min_cnt = min(min_cnt, min(b_cnt, w_cnt))
print(min_cnt)

 

▼링크

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

반응형