## 체스판 다시 칠하기 - 실버 4
a, b= map(int, input().split())
n=[]
m=[]
for _ in range(a):
k=input()
m.append(k)
x=0
res=[]
cl=[]
dl=[]
c='W'
d='B'
cl.append(c)
dl.append(d)
for j in range(63):
if cl[j]==c and (j+1)%8!=0:
cl.append(d)
dl.append(c)
elif cl[j]==d and (j+1)%8!=0:
cl.append(c)
dl.append(d)
elif cl[j]==c and (j+1)%8==0:
cl.append(c)
dl.append(d)
elif cl[j]==d and (j+1)%8==0:
cl.append(d)
dl.append(c)
x, y=0, 0
for i in range(a-7):
for j in range(b-7):
for e in range(i, i+8):
for f in range(j, j+8):
n.append(m[e][f])
for r in range(64):
if n[r]!=cl[r]:
x+=1
if n[r]!=dl[r]:
y+=1
res.append(x)
res.append(y)
n=[]
x=0
y=0
print(min(res))
## 체스판 다시 칠하기 - 실버 4
a, b= map(int, input().split())
n=[]
for i in range(a):
n+=list(input())
# n.append(k)
x=0
cl=[]
dl=[]
c='W'
d='B'
cl.append(c)
dl.append(d)
for j in range(a*b-1):
if cl[j]==c and (j+1)%b!=0:
cl.append(d)
dl.append(c)
elif cl[j]==d and (j+1)%b!=0:
cl.append(c)
dl.append(d)
elif cl[j]==c and (j+1)%b==0:
cl.append(c)
dl.append(d)
elif cl[j]==d and (j+1)%b==0:
cl.append(d)
dl.append(c)
x, y=0, 0
for i in range(a*b):
if n[i]!=cl[i]:
x+=1
if n[i]!=dl[i]:
y+=1
print(min(x, y))
정답으로 해당되는 체스판을 미리 만들어놓고 비교하고자 했다.
흰색으로 시작하는 체스판, 검은색으로 시작하는 체스판 이렇게 2개를 만들어놓았다.
다 만들어놓고 이제 됐다 싶었는데 잘못된 답이 나왔다.
다시 문제를 보니 큰 보드 중 8*8 체스판으로 잘라낸 후에 잘못된 정사각형을 찾는 것이었다..
역시 문제를 제대로 꼼꼼히 읽어야 한다...ㅠㅠㅠ
그래서 내 방식대로 코드를 작성했다. 생각보다 오랜 시간 작성해서 해결했다.
그래도 스스로 해결해서 뿌듯하다!
이후 다른 사람의 코드를 보고 더 짧게 작성하는 방법을 알 수 있었다.
n,m=map(int,input().split())
mtr=[]
cnt=[]
for i in range(n):
mtr.append(input())
for a in range(n-7):
for b in range(m-7):#8*8로 자르기 위해, -7해준다
w_index=0 #흰색으로 시작
b_index=0 #검은색으로 시작
for i in range(a,a+8):#시작지점
for j in range(b,b+8):#시작지점
if (i+j)%2==0:#짝수인 경우
if mtr[i][j]!='W':#W가 아니면, 즉 B이면
w_index+=1#W로 칠하는 갯수
else:#W일 때
b_index+=1#B로 칠하는 갯수
else:#홀수인 경우
if mtr[i][j]!='W':#W가 아니면, 즉 B이면
b_index+=1#B로 칠하는 갯수
else:
w_index+=1#W로 칠하는 갯수
cnt.append(w_index) #W로 시작할 때 경우의 수
cnt.append(b_index) #B로 시작할 때 경우의 수
print(min(cnt))