
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./예제.txt";
let input = fs.readFileSync(filePath).toString().trim();
// const fs = require('fs');
// let input = fs.readFileSync('/dev/stdin').toString().trim();
input=input.split('\n')
let N=+input[0].split(' ')[0]
let M=+input[0].split(' ')[1]
let A=input.slice(1, N+1)
A=A.map((el)=>el.trim().split('').map((el)=>+el))
let B=input.slice(N+1)
B=B.map((el)=>el.trim().split('').map((el)=>+el))
//테이블 값 변환
const flip=(x, y)=>{
for(let i=x; i<x+3; i++){
for(let j=y; j<y+3; j++){
A[i][j] = 1 - A[i][j];
}
}
}
const solution= (N, M, A, B)=>{
let count=0;
// 뒤집을지 결정하는 과정: 왼쪽 최상단 값 비교해야 함.
// N과 M이 3 미만인 경우에는 애초에 아래의 for문이 돌아가지 않음.
for (let i=0;i<N-2;i++){
for (let j=0;j<M-2;j++){
if (A[i][j]!==B[i][j]){
flip(i, j)
count+=1;
}
}
}
// A와 B가 완벽하게 같은 행렬인지 체크하는 부분.
for (let i=0;i<N;i++){
for (let j=0;j<M;j++){
if (A[i][j]!==B[i][j]){
count=-1;
break;
}
}
}
return count
}
console.log(solution(N, M , A, B))
https://ghost4551.tistory.com/14