백준 문제풀이/브루트포스(Bruteforce)

백준 온라인 저지 - 체스판 다시 칠하기(#1018) 파이썬

Itscool 2022. 1. 11. 20:43

문제설명

이 문제는 가능한 모든 경우의 수를 for loop을 통하여 접근하여 최솟값을 결정하는 문제입니다. 파이썬의 List slicing 기능을 이용하여 주어진 문제를 보다 쉽게 해결할 수 있었습니다. 

 

체스판 다시 칠하기(#1018) 파이썬 코드

import sys

#입력
M, N = map(int, input().split())
inp = []
for i in range(M):
    inp.append(sys.stdin.readline())

# 체스판 자르기
def cut_board(first_board):
    length = len(first_board)
    width = len(first_board[0])
    board_list = []

    for w in range(width - 7):
        for l in range(length - 7):
            board = []
            for i in range(8):
                board.append(list(first_board[l+i][w:w+8]))
            board_list.append(board)
    return board_list

# 바뀐 횟수 체크
def cnt_change(board):
    cnt1 = 0
    cnt2 = 0
    for i in range(8):
        for j in range(8):
            if (i + j) % 2 == 0:
                if board[i][j] != 'W':
                    cnt1 += 1
            else:
                if board[i][j] != 'B':
                    cnt1 += 1
            if (i + j) % 2 == 0:
                if board[i][j] != 'B':
                    cnt2 += 1
            else:
                if board[i][j] != 'W':
                    cnt2 += 1
    return min(cnt1, cnt2)


# 결과 출력
board_list = cut_board(inp)
min_cnt = 12345678765
for board in board_list:
    min_cnt = min(cnt_change(board), min_cnt)

print(min_cnt)