ebson

boj.kr/1080 체스판 다시 칠하기 (silver4) 파이썬 풀이 본문

ALGORITHM STUDY WITH PYTHON/Bruteforce

boj.kr/1080 체스판 다시 칠하기 (silver4) 파이썬 풀이

ebson 2024. 5. 25. 20:54

1. N 행 M 열의 체스판을 순회하면서 아래를 수행

1.1. 0행 0열을 B로 시작하는 체스판으로 바꾸는 경우에 바꿔야 하는 칸의 개수를 카운트

1.2. 0행 0열을 W로 시작하는 체스판으로 바꾸는 경우에 바꿔야 하는 칸의 개수를 카운트

2. N 행 M 열의 체스판에서 8*8 크기의 체스판을 구하는 모든 경우에 아래를 수행

2.1. 0행 0열을 B로 시작하는 경우, cntList 으로 8*8 크기의 체스판에서 바꿔야 하는 칸의 개수를 추가 

2.1. 0행 0열을 W로 시작하는 경우, cntList 으로 8*8 크기의 체스판에서 바꿔야 하는 칸의 개수를 추가 

3. cntList 에서 최소값을 출력 

 

N, M = map(int, input().split())
board = [input() for _ in range(N)]

cntBoardB = [[0 for _ in range(M)] for _ in range(N)]
cntBoardW = [[0 for _ in range(M)] for _ in range(N)]

for r in range(N):
    for c in range(M):
        if r % 2 == 0:
            if c % 2 == 0:
                if board[r][c] == 'W':
                    cntBoardB[r][c] = 1
                if board[r][c] == 'B':
                    cntBoardW[r][c] = 1
            if c % 2 == 1:
                if board[r][c] == 'B':
                    cntBoardB[r][c] = 1
                if board[r][c] == 'W':
                    cntBoardW[r][c] = 1
        if r % 2 == 1:
            if c % 2 == 0:
                if board[r][c] == 'B':
                    cntBoardB[r][c] = 1
                if board[r][c] == 'W':
                    cntBoardW[r][c] = 1
            if c % 2 == 1:
                if board[r][c] == 'W':
                    cntBoardB[r][c] = 1
                if board[r][c] == 'B':
                    cntBoardW[r][c] = 1

cntList = []
cntB = 0
cntW = 0

for i in range(N-7):
    for j in range(M-7):
        for k in range(8):
            for l in range(8):
                cntB += cntBoardB[i+k][j+l]
                cntW += cntBoardW[i+k][j+l]
        cntList.append(cntB)
        cntList.append(cntW)
        cntB = 0
        cntW = 0


print(sorted(cntList)[0])

 

Comments