티스토리 뷰

백준 1018번 체스판 다시 칠하기


8*8의 정상적인 체스판을 2가지 준비한다.(왼쪽 위가 흰색일 때와 검은색일때)

이후 입력받은 체스판과 비교하며 다시 칠해야 하는 부분이 가장 적은 횟수를 골라 출력한다.

문제풀이

N, M = map(int, input().split())
board = [[0] * 50 for i in range(50)]
rst = 64
whiteboard = [["WBWBWBWB"],
              ["BWBWBWBW"],
              ["WBWBWBWB"],
              ["BWBWBWBW"],
              ["WBWBWBWB"],
              ["BWBWBWBW"],
              ["WBWBWBWB"],
              ["BWBWBWBW"]]
blackboard = [["BWBWBWBW"],
              ["WBWBWBWB"],
              ["BWBWBWBW"],
              ["WBWBWBWB"],
              ["BWBWBWBW"],
              ["WBWBWBWB"],
              ["BWBWBWBW"],
              ["WBWBWBWB"]]

def white(x, y): #왼쪽 상단이 흰색일때
    cnt = 0
    for RPT in range(y, y+8):
        for rpt in range(x, x+8):
            if whiteboard[RPT - y][0][rpt - x] != board[RPT][rpt]:
                cnt += 1
    return cnt

def black(x, y): #왼쪽 상단이 검은색일때
    cnt = 0
    for RPT in range(y, y+8):
        for rpt in range(x, x+8):
            if blackboard[RPT - y][0][rpt - x] != board[RPT][rpt]:
                cnt += 1
    return cnt

for RPT in range(0,N): #입력 받은 체스판을 보드에 입력
    line = input()
    for rpt in range(0,M):
        board[RPT][rpt] = line[rpt]

for RPT in range(0,N-7): #입력 받은 체스판과 기존의 체스판을 비교
    for rpt in range(0,M-7):
        rst = min(rst,white(rpt,RPT),black(rpt,RPT))
print(rst)


댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total
Today
Yesterday