코딩일지/python 백준 알고리즘

python 백준 알고리즘 1018번: 체스판 다시 칠하기

야언 2022. 9. 19. 19:23

https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

 

 

 

8*8 체스판을 만들기 위해 공간확보 필요(range(n-7), range(m-7))

흰색으로 시작할 경우, 검은색으로 시작할 경우별로 경우의 수를 모두 구해서

최솟값(min) 출력.

 구상은 했지만 코드를 짜는데 어려움을 많이 겪어 구글링을 많이 한 문제다. 꾸준히 복습해서 제대로 흡수합시다

 

 

 

내 제출

n, m = map(int, input().split())  # 열, 행
board = []
cnt = []

for _ in range(n):  # 열만큼 반복
    board.append(input())

for a in range(n-7):
    for b in range(m-7):  #8*8로 자르기 위해, -7해준다 (8*8 공간 확보)
        w_index = 0  # 흰색으로 시작
        b_index = 0  # 검은색으로 시작
        for i in range(a, a+8):  # 시작지점
            for j in range(b, b+8):  # 시작지점
                if (i+j)%2 == 0:  # 짝수인 경우
                    if board[i][j] == 'B':  # B일 경우
                        w_index+=  1  # W로 칠하는 갯수
                    else:  # W일 경우
                        b_index+=  1  # B로 칠하는 갯수
                else:  #홀수인 경우
                    if board[i][j] == 'B':  # B일 경우
                        b_index+=  1  # B로 칠하는 갯수
                    else:  # W일 경우
                        w_index+=  1  # W로 칠하는 갯수
                        
        cnt.append(w_index)  # W로 시작하는 경우의 수
        cnt.append(b_index)  # B로 시작하는 경우의 수
print(min(cnt))