cnt=0
n,m = map(int,input().split())
matrixA = [list(map(int,list(input()))) for _ in range(n)]
matrixB = [list(map(int,list(input()))) for _ in range(n)]
def change(x,y):
for i in range(x,x+3):
for j in range(y,y+3):
matrixA[i][j]=1-matrixA[i][j] #1->0 0->1 skill
def check():
for i in range(n):
for j in range(m):
if matrixA[i][j]!=matrixB[i][j]:
return False
return True
for i in range(n-2):
for j in range(m-2):
if matrixA[i][j] != matrixB[i][j]:
change(i,j)
cnt+=1
if check():
print(cnt)
else:
print(-1)
행렬 입력받을때 이런 방식으로 한줄로 입력이 가능하다..
def change(x,y):
for i in range(x,x+3):
for j in range(y,y+3):
matrixA[i][j]=1-matrixA[i][j] #1->0 0->1 skill
매트릭스를 뒤집는데 1- 이런식으로 접근해서 1->0 0->1로 변경이 가능하다 유용한 스킬인거같다.
def check():
for i in range(n):
for j in range(m):
if matrixA[i][j]!=matrixB[i][j]:
return False
return True
그냥 체크하는 함수..
결론은, 두 행렬을 비교하고 만약 같지 않다면 change함수를 돌리면서 계속해서 변경해나가는건데 순서대로 포문을 돌면서 실행하는 방식이여서 최적의해를 구하는 그리디알고리즘인것같다..
그리디 넘나리 어렵다리,,,