๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 1080๋ฒ ํ๋ ฌ ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
์ด๋ฒ ๋ฌธ์ ๋ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๋ฉด ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ์์๋ ์์ ํ๋ ฌ๊ณผ ํ๊น ํ๋ ฌ์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
3 by 3์ ๋ถ๋ถ ํ๋ ฌ ์ ๋นํธ ๋ฐ์ ์์ผฐ์ ๋, ์ต์ ๋ช ๋ฒ์ ๋ฐ์ ์ ์์ผ์ผ ํ๊น ํ๋ ฌ๊ณผ ๋์ผํ๊ฒ ๋๋์ง ์ต์ ํ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ํด๊ฒฐ๋ฒ
n by m ํ๋ ฌ์ด ์๋ค๋ฉด ๋ฐฐ์ด ์์ ํ๋์ฉ iteration ํ๋ฉด์ start ํ๋ ฌ๊ณผ target ํ๋ ฌ์ ์์๊ฐ ๋์ผํ๋ค๋ฉด ๋์ด๊ฐ๊ณ ๋์ผํ์ง ์๋ค๋ฉด flip ํ๋ฉด ๋๋ค.
์ ๋ต ์ฝ๋
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] nm = br.readLine().split(" ");
int n = Integer.parseInt(nm[0]);
int m = Integer.parseInt(nm[1]);
int[][] start = new int[n][m];
int[][] target = new int[n][m];
for (int i = 0; i < n; i++) {
String[] line = br.readLine().split("");
for (int j = 0; j < m; j++) {
start[i][j] = Integer.parseInt(line[j]);
}
}
for (int i = 0; i < n; i++) {
String[] line = br.readLine().split("");
for (int j = 0; j < m; j++) {
target[i][j] = Integer.parseInt(line[j]);
}
}
int answer = 0;
if(n < 3 || m < 3) {
if(Arrays.deepEquals(start, target)) {
bw.write("0");
}else {
bw.write("-1");
}
bw.flush();
return;
}
boolean flag = false;
if(Arrays.deepEquals(start, target)) {
flag = true;
}else {
mainLoop: for (int i = 0; i < n - 2; i++) {
for (int j = 0; j < m - 2; j++) {
if(start[i][j] != target[i][j]) {
for (int k = i; k <= i + 2; k++) {
for (int l = j; l <= j + 2; l++) {
start[k][l] = (start[k][l] == 1) ? 0 : 1;
}
}
answer++;
}
if(Arrays.deepEquals(start, target)) {
flag = true;
break mainLoop;
}
}
}
}
// count ์ถ๋ ฅ
if(flag && Arrays.deepEquals(start, target)) {
bw.write(String.valueOf(answer));
}else {
bw.write("-1");
}
bw.flush();
bw.close();
}
}
๋๊ธ