리셋 되지 말자

[백준 1080] 체스판 다시 칠하기 - 브루트포스 본문

알고리즘

[백준 1080] 체스판 다시 칠하기 - 브루트포스

kyeongjun-dev 2022. 1. 18. 11:17

코드

def solution(arr):
    answer = 2e9
    # black 시작하는 체스판
    b_arr = [
        list('BWBWBWBW'),
        list('WBWBWBWB'),
        list('BWBWBWBW'),
        list('WBWBWBWB'),
        list('BWBWBWBW'),
        list('WBWBWBWB'),
        list('BWBWBWBW'),
        list('WBWBWBWB')
    ]

    # white 시작하는 체스판
    w_arr = [
        list('WBWBWBWB'),
        list('BWBWBWBW'),
        list('WBWBWBWB'),
        list('BWBWBWBW'),
        list('WBWBWBWB'),
        list('BWBWBWBW'),
        list('WBWBWBWB'),
        list('BWBWBWBW'),
    ]

    # height, width를 -7 까지만 탐색
    for h in range(len(arr)-7):
        for w in range(len(arr[0])-7):
            b_cnt = 0
            w_cnt = 0
            # height+7, width+7 까지 탐색하며 b_arr, w_arr과 다르면 각자 카운트
            for j in range(8):
                for i in range(8):
                    if arr[h+j][w+i] != b_arr[j][i]:
                        b_cnt += 1
                    if arr[h+j][w+i] != w_arr[j][i]:
                        w_cnt += 1
            # 최소값으로 업데이트                        
            answer= min(answer, min(b_cnt, w_cnt))
    print(answer)

h, w = map(int, input().split())

arr = []
for _ in range(h):
    arr.append(list(input()))
solution(arr)

(i+j)%2 를 사용하면, b_arr w_arr 없이 풀 수 있다...

 

Comments