체스판 다시 칠하기..
이런 식으로 주어지면 체스판으로 만들기 위해 다시 칠해야하는 정사각형 개수를
각각 다른 경우의 수 전부 구해서 비교하면 되는 문제
경우의 수 각각을 어떻게 표현해야 할 지 몰라서 for문 엄청 썼다가 아닌거같아서 다시 시작,, 결국 for문 4번 써서 성공
import sys
N, M = map(int, sys.stdin.readline().split())
B = [] # 여기에 주어진 판 넣기
for i in range(N):
B.append(list(sys.stdin.readline().rstrip())) # 리스트 안에 한 줄씩 리스트로 넣음
rec_min = [] # 최소 정사각형 개수 나오는 경우의 수 저장
for i in range(N-7) : # 위부터
for j in range(M-7): # 왼쪽부터
start_B = 0 # 블랙으로 시작하는 경우 바꿔야하는 정사각형 개수
start_W = 0 # 화이트로 시작하는 경우 바꿔야하는 정사각형 개수
for k in range(i, i+8): # 위부터 8칸
for l in range(j, j+8): # 왼쪽부터 8칸
if (k + l) % 2 == 1 : # k + l 이 홀수일 때
if B[k][l] != 'B':
start_B += 1 # 실제로 바꾸진 않고 바꿔야하는 개수만 더해줌
if B[k][l] != 'W':
start_W += 1
else: # k + l 이 짝수일 때
if B[k][l] != 'W':
start_B += 1
if B[k][l] != 'B':
start_W += 1
rec_min.append(min(start_B, start_W)) # 둘 중 작은 것 저장
print(min(rec_min))
'공부하자! > 알고리즘' 카테고리의 다른 글
백준 10845 파이썬 큐 (0) | 2021.03.09 |
---|---|
백준 2108 파이썬 통계학 (0) | 2021.03.08 |
백준 1065 파이썬 한수 (0) | 2021.01.26 |
백준 4673 파이썬 셀프 넘버 (0) | 2021.01.25 |
백준 4344 파이썬 평균은 넘겠지 (0) | 2021.01.25 |