https://www.acmicpc.net/problem/1018

##
주어지는 판 안에서 8*8 체스판을 만드는데
색칠된걸 바꾸는 숫자가 최소인 경우를 찾으면 된다.
문제에서 체스판 자체의 경우의수는 2가지라고 나와있기는 하다

##
import sys
input = sys.stdin.read

inp = list(map(lambda x:x.replace('\x1a',''),input().splitlines()))
x,y = map(int,inp[0].split())
inp = inp[1:]

line1 = ''
for i in range(y):
    if i%2==0:
        line1 += 'W'
    else:
        line1 += 'B'

line2 = line1[1:]
if line2[-1] == 'W':
    line2 += 'B'
else:
    line2 += 'W'

case1 = []
case2 = []
for i in range(x):
    if i%2 ==0:
        case1 += [line1]
        case2 += [line2]
    else:
        case1 += [line2]
        case2 += [line1]

cmp_min = 65
for a in range(0,x-7):
    for b in range(0,y-7):
        cmp1 = 0
        cmp2 = 0
        for i in range(8):
            for j in range(8):
                if inp[a+i][b+j] == case1[a+i][b+j]:
                    cmp1 += 1
                if inp[a+i][b+j] == case2[a+i][b+j]:
                    cmp2 += 1
        if cmp_min > cmp1:
            cmp_min = cmp1
        if cmp_min > cmp2:
            cmp_min = cmp2

print(cmp_min)
처음에 8*8이 아닌 주어진 케이스 전체에서 몇개를 최소로 바꾸어야 흰색과 검은색이 번갈아 칠해지는 상태가 되는지로 문제를 잘못 읽어서
case 2개로 전체 판을 먼저 만들고 8*8을 잘라내면서 비교하는 식으로 풀었다
어쨌든 괜찮게 풀었다는 생각은 드는데 주어지는 판 안에서 8*8의 경우만 2개 case를 가지고 찾는다면 메모리가 좀더 적게 들지 않을까 싶다.


import sys
# 입력
lines = sys.stdin.readlines()
tmp_list = []
for idx in range(1,len(lines)):
    lines[idx] = lines[idx].replace('\n','').replace('\x1a','')
    tmp_list += [lines[idx]]

# 체크할 8*8 바둑판의 시작점을 잡는다
start_point = []
for start_idx in range(len(tmp_list)-7):
    for start_idx2 in range(len(tmp_list[start_idx])-7):
        start_point += [(start_idx,start_idx2)]

# 한 줄 단위로 시작점부터 비교한다
cmp1 = 'WBWBWBWB'
cmp2 = 'BWBWBWBW'
cnt_list = []
for a,b in start_point:
    cnt = 0
    for add_a in range(8):
        # 처음 나오는 문자 기준으로 바둑판의 형태 잡고 비교
        if tmp_list[a][b] == 'W':
            if add_a % 2 == 0:
                cmp = cmp1
            else:
                cmp = cmp2
        else :
            if add_a % 2 == 0:
                cmp = cmp2
            else:
                cmp = cmp1
        for add_b in range(8):
            if tmp_list[a+add_a][b+add_b] != cmp[add_b]:
                cnt += 1
    cnt_list += [cnt]

    cnt = 0
    # 맨 끝의 문자를 기준으로 하면 처음을 기준으로 할때와 결과가 달라질수 있다.
    for add_a in range(8):
        if tmp_list[a+7][b+7] == 'W':
            if add_a % 2 == 0:
                cmp = cmp1
            else:
                cmp = cmp2
        else :
            if add_a % 2 == 0:
                cmp = cmp2
            else:
                cmp = cmp1
        for add_b in range(8):
            if tmp_list[a+add_a][b+add_b] != cmp[add_b]:
                cnt += 1
    cnt_list += [cnt]

    cnt = 0
    # 첫줄 맨 끝의 문자
    for add_a in range(8):
        if tmp_list[a][b+7] == 'W':
            if add_a % 2 == 0:
                cmp = cmp2
            else:
                cmp = cmp1
        else :
            if add_a % 2 == 0:
                cmp = cmp1
            else:
                cmp = cmp2
        for add_b in range(8):
            if tmp_list[a+add_a][b+add_b] != cmp[add_b]:
                cnt += 1
    cnt_list += [cnt]

    cnt = 0
    # 마지막줄 처음 문자
    for add_a in range(8):
        if tmp_list[a+7][b] == 'W':
            if add_a % 2 == 0:
                cmp = cmp2
            else:
                cmp = cmp1
        else :
            if add_a % 2 == 0:
                cmp = cmp1
            else:
                cmp = cmp2
        for add_b in range(8):
            if tmp_list[a+add_a][b+add_b] != cmp[add_b]:
                cnt += 1
    cnt_list += [cnt]
print(min(cnt_list))
이게 예전에 제출한 코드인데, 재채점되어서 틀렸다고 되어있네