한 칸씩 이동하며, 3X3 행렬을 검사하는 방식으로 문제를 해결하였습니다.
이때, -1이 나올 수 있는 경우를 생각하여 추가적으로 예외처리를 하였습니다.
# 행렬
import sys
N,M = map(int,sys.stdin.readline().split())
A = [list(map(int,input())) for _ in range(N)]
B = [list(map(int,input()))for _ in range(N)]
if N < 3 or M < 3: # 3x3 행렬을 만들 수 없는 경우 -> -1 출력 (반례)
print(-1)
exit()
count = 0
for i in range(N-2):
for j in range(M-2):
if A[i][j] != B[i][j]:
count += 1
for n in range(3):
for m in range(3):
if A[i+n][j+m] == 0:
A[i+n][j+m] =1
elif A[i+n][j+m] == 1:
A[i + n][j + m] = 0
if A == B:
break
if A != B: # 3x3을 모두 시도해봐도 행렬이 다른 경우 -> -1 출력 (반례)
print(-1)
else:
print(count)
나름 반례를 생각하며 문제를 풀었는데도 60%에서 "틀렸습니다"가 떴습니다.
# 행렬
import sys
N,M = map(int,sys.stdin.readline().split())
A = [list(map(int,input())) for _ in range(N)]
B = [list(map(int,input()))for _ in range(N)]
if N < 3 or M < 3: # 3x3 행렬을 만들 수 없는 경우 -> -1 출력 (반례)
if A == B:
print(0)
else:
print(-1)
exit()
count = 0
for i in range(N-2):
for j in range(M-2):
if A[i][j] != B[i][j]:
count += 1
for n in range(3):
for m in range(3):
if A[i+n][j+m] == 0:
A[i+n][j+m] =1
elif A[i+n][j+m] == 1:
A[i + n][j + m] = 0
if A == B:
break
if A != B: # 3x3을 모두 시도해봐도 행렬이 다른 경우 -> -1 출력 (반례)
print(-1)
else:
print(count)
N또는 M값이 3보다 작을 때, 두 행렬이 같은 경우에 대한 조건을 넣어주니 맞았습니다.