sm 기술 블로그

78.1018(체스판 다시 칠하기) 본문

문제/백준_파이썬

78.1018(체스판 다시 칠하기)

sm_hope 2022. 6. 11. 17:57
chessBoard = ['WBWBWBWB', 'BWBWBWBW']*4

N, M = map(int, input().split())

chess = [input() for _ in range(N)]

cntRepository = []

for n in range(N-7):
    for m in range(M-7):

        cnt = 0
        for i in range(8):
            for j in range(8):
                if chess[n+i][m+j] != chessBoard[i][j]:
                  # 8*8로 만든 입력된 체스판 != 위에서 저장한 체스판
                    cnt += 1

        cntRepository.append(cnt)  # 입력된 색의 기준으로
        cntRepository.append(64-cnt)  # 입력된 색의 반대로

print(min(cntRepository))

문제요약

N * M 의 보드가 들어온다. (8<=N,M<=50)

흰색 검은색 혹은 검은색 흰색으로 이루어진 온전한 8*8체스판을 만들기 위해 얼마나 다시 칠해야 하는가? 

 

해결

- [input() for_in range(N)]은 N번만큼 반복하여 리스트에 값을 저장한다.

예를 들어 위와 같이 9*9보드가 들어오면 0,0 ~ 7,7 | 1,0 ~ 8,7 ... 을 처리하여 맨위에 초기화 해준 체스판과 다른 부분은 cnt를 증가시켜 준다.

 

체스판은

두가지 가 있으므로 색을 뒤집지 않았을 때 cnt 와 색을 뒤집었을 때 64-cnt (최대 색을 다시칠하는 횟수는 64)를 cntRepository에 저장한다.

 

cntRepository에서 가장 작은 값이 답이된다.

'문제 > 백준_파이썬' 카테고리의 다른 글

80. 2750(수 정렬하기)  (0) 2022.06.12
79. 1436(영화감독 숌)  (0) 2022.06.12
77. 7568(덩치)  (0) 2022.06.11
76. 2231 (분해합)  (0) 2022.06.09
75. 2798(블랙잭)  (0) 2022.06.08
Comments