https://www.acmicpc.net/problem/1080
풀이:
(0, 0) 부터 하나씩 비교해 나간다.
만약 A 와 B 의 숫자가 다르다면, 현재 위치부터 3 * 3 전체를 반전시킨다.
반전 시켰다면, 뒤집은 횟수를 +1 해준다.
순환이 끝난 후 행렬 A 와 B 가 다르다면 -1을 같다면 뒤집은 횟수를 출력해준다.
코드:
사용언어 : c++
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 | #include <iostream>
#include <vector>
using namespace std;
int N, M, c = 0, i, t, u, y;
int main() {
	cin >> N >> M;
	vector<string> a(N), b(N);
	for (i = 0; i < N; i++)
		cin >> a[i];
	for (i = 0; i < N; i++)
		cin >> b[i];
	for (i = 0; i < N - 2; i++)
		for (t = 0; t < M - 2; t++)
			if (a[i][t] != b[i][t]) {
				c++;
				for (y = 0; y < 3; y++)
					for (u = 0; u < 3; u++)
						a[i + y][t + u] = '1' - a[i + y][t + u] + '0';
			}
	for (i = 0; i < N; i++)
		if (a[i] != b[i])	c = -1;
	cout << c << endl;
}
 |