[백준/파이썬] 1018번 - 체스판 다시 칠하기

Jungyu Jin·2022년 1월 11일
0

BackJoon

목록 보기
12/16

문제 설명

풀이 전략

주어진 입력 보드에서 8×88\times8 크기를 분리하고, 분리한 보드의 수정 횟수를 구해가며 최소 수정 횟수를 출력한다. 주어진 보드에서 생성할 수 있는 8×88\times8 프레임의 좌상단 꼭짓점 인덱스를 모두 순회하며 수정 횟수를 비교하며 최소 수정 횟수를 구하면 된다.

  • 주요 포인트
  1. 비교할 체스판의 원본 만들기
  2. 분리할 8x8 프레임의 좌상단 꼭짓점 범위 지정
  3. 원본 체스판과 분리한 프레임을 비교하여 수정 횟수 구하는 함수 만들기

코드

lines=['WBWBWBWB','BWBWBWBW']
chess_1 = lines * 4 # 원본 체스판1
chess_2 = chess_1[::-1] # 원본 체스판 2

n,m=map(int,input().split())
board=[]
for _ in range(n):
    board.append(input())
    
# 원본 체스판과 전체 보드에서 프레임을 돌며 비교하는 함수
def checkboard(chess,board,n,m):
    mincount = 64
    for x in range(n-7):
        for y in range(m-7):
            count = 64
            for i in range(8):
                for j in range(8):
                    if chess[i][j] == board[x+i][y+j]:
                        count -= 1
            mincount = min(mincount,count)
    return mincount
# 체스판1과 체스판2 비교 횟수 중 작은 것을 출력
print(min(checkboard(chess_1,board,n,m),checkboard(chess_2,board,n,m)))

0개의 댓글