sm 기술 블로그
78.1018(체스판 다시 칠하기) 본문
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