Contents

[백준]1080 행렬

Contents

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;
}