S E P H ' S

[Python] BJ 1018 체스판 다시 칠하기 본문

Algorithm/BackJoon

[Python] BJ 1018 체스판 다시 칠하기

yoseph0310 2021. 6. 16. 14:39
 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

입력부분

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

for i in range(N):
    board.append(input())

new_board = []

1. 한 줄로 공백으로 주어지는 N,M을 입력받는다.

2. 보드의 정보를 받을 board를 list()로 선언한다.

3. for 문으로 입력을 받는다.

4. new_board 를 다시 칠해야 하는 개수가 담긴 list로 선언

 

풀이부분

for i in range(N-7):
    for j in range(M-7):
        first_W = 0
        first_B = 0
        for k in range(i, i+8):
            for l in range(j, j+8):
                if (k+l) % 2 == 0:
                    if board[k][l] != 'W':
                        first_W = first_W+1
                    if board[k][l] != 'B':
                        first_B = first_B+1
                else:
                    if board[k][l] != 'B':
                        first_W = first_W + 1
                    if board[k][l] != 'W':
                        first_B = first_B + 1

        new_board.append(first_W)
        new_board.append(first_B)

print(min(new_board))

1. 가로, 세로 8*8 크기의 체스판을 새로 잘라내고 다시 칠하겠다 했으므로 8*8 범위 만큼씩 다시 칠해야 하는 정사각형 개수를 세야 한다. 체스판의 N,M이 8보다 크거나 같으므로 최소 한 번은 체크를 하기 때문에 i,j 는 N-7, M-7씩 체크를 한다.

2. 바꿔야 하는 정사각형 개수의 변수 두개 선언

3. i,j 만큼의 체스판 안에서 각 하나하나 ( k, l ) 요소가 W인지 B인지 체크

4. 짝수 인덱스, 홀수 인덱스 일때, 또 그 안에서 B인지 W인지를 체크.

5. new_board에 first_W, first_B를 담고 min 을 출력하여 정답 출력