백준 1018 파이썬 체스판 다시 칠하기

 

 

 

체스판 다시 칠하기..

 

이런 식으로 주어지면 체스판으로 만들기 위해 다시 칠해야하는 정사각형 개수를

각각 다른 경우의 수 전부 구해서 비교하면 되는 문제

 

 

경우의 수 각각을 어떻게 표현해야 할 지 몰라서 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