(1,1)부터 (N,M)까지 차례대로 탐색하면서 A행렬과 B행렬의 값이 일치하지 않는 위치를 발견하면 행렬을 변환하는 연산을 수행한다.
행렬 변환을 수행할 때마다 횟수를 카운팅하면서 (N,M)까지 탐색을 완료했을 때, A행렬과 B행렬이 일치하지 않는다면 불가능이므로 -1을 출력하고 일치한다면 카운팅한 횟수를 출력하면 정답을 받을 수 있다.
#include <iostream>
#include <string>
using namespace std;
int Greedy(bool check[][50], int N, int M)
{
int cnt = 0;
for(int i=0; i<N-2; i++)
for (int j = 0; j < M-2; j++)
if (!check[i][j])
{
for (int k = 0; k < 3; k++)
for (int l = 0; l < 3; l++)
check[i + k][j + l] = !check[i + k][j + l];
cnt++;
}
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
if (!check[i][j])
return -1;
return cnt;
}
int main(void)
{
int N, M;
cin >> N >> M;
bool check[50][50];
string A[50], B[50];
for (int i = 0; i < N; i++)
cin >> A[i];
for(int i=0; i<N; i++)
cin >> B[i];
for(int i=0; i<N; i++)
for (int j = 0; j < M; j++)
{
if (A[i][j] == B[i][j])
check[i][j] = true;
else
check[i][j] = false;
}
cout << Greedy(check, N, M) << endl;
return 0;
}
알고리즘 200일 프로젝트 - 114 day
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1138번: 한 줄로 서기 (0) | 2020.08.02 |
---|---|
백준 2352번: 반도체 설계 (0) | 2020.07.30 |
백준 16637번: 괄호 추가하기 (0) | 2020.07.29 |
백준 2529번: 부등호 (0) | 2020.07.29 |
백준 1049번: 기타줄 (0) | 2020.07.28 |