소스 코드

def dfs(i,j,color,cnt):
    global min_res

    # 8칸 확인
    for ii in range(i,i+8):
        for jj in range(j,j+8):

            # 0,7의 색과 1,0의 색은 같음
            if jj != j+7:
                if board[ii][jj] == x[color%2]:
                    color += 1

                # 색이 다른 경우 한 cnt+1
                else:
                    color += 1
                    cnt += 1

            else:
                if board[ii][jj] != x[color%2]:
                    cnt += 1

    if min_res > cnt:
        min_res = cnt

    return



# 체스판 크기
N,M = map(int,input().split())

# 체스판
board = [list(map(str,input())) for _ in range(N)]

# 최소 값
min_res = 64

# 흰 검 이동
x = ['W','B']

# 8x8 체스판 특정하기
for q in range(N-7):
    for w in range(M-7):
        # 체스판의 시작점(0,0)의 색도 바꿀 수 있음
        # q,w,색,몇 번 색칠했는지
        dfs(q,w,0,0)
        dfs(q,w,1,0)            

print(min_res)

 


해결 방법

1. dfs를 사용하여 문제 해결

 

2. 체스판의 시작 위치는 0 <= i < N-7 / 0 <= j < M-7 이다.

 

3. 체스판의 시작 위치의 색도 바꿀 수 있다.

 


느낀 점

빠른 문제 해결을 위해서는 정확한 조건을 정하는 것이 핵심!

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.