BOJ

[BOJ] 17302 흰색으로 만들기

[gunwookim] 2020. 5. 21. 23:28

흰색으로 만들기 문제다.

 

17302번: 흰색으로 만들기

첫 줄에 N과 M이 주어진다. (1 ≤ N, M ≤ 2,000) 다음 줄부터 N개의 줄에 걸쳐 각 행의 상태를 나타내는 길이 M의 문자열이 주어진다. 모든 문자열은 'B'와 'W'로 이루어져 있다. i 번째 줄, j 번째 문자�

www.acmicpc.net

관찰을 하나 해보자. 2번 동작에서 3번 동작으로 바꾸면, 가운데 하나만 색이 반전 된다는 것을 알 수 있다.

모두 2번 동작을 한다. 그리고 검은색 타일에 대해서 3번 동작으로 바꿔주면 모두 하얀색 타일로 바뀐다.

 

#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair <ll,ll> pl;
typedef pair <int,int> pi;
int n,m,a[2005][2005];
char in[2005];
int ans[2005][2005];
int nx[4] = {1,0,-1,0}, ny[4] = {0,1,0,-1};

int main() {
	ios_base::sync_with_stdio(false); cin.tie(0);
	cin >> n >> m;
	for(int i = 1;i <= n;i++) {
		cin >> in+1;
		for(int j = 1;j <= m;j++) if(in[j] == 'B') a[i][j] = 1;
	}
	for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++) {
		ans[i][j] = 2;
		for(int k = 0;k < 4;k++) a[i+nx[k]][j+ny[k]] ^= 1;
	}
	cout << "1\n";
	for(int i = 1;i <= n;i++) {
		for(int j = 1;j <= m;j++) {
			if(a[i][j]) ans[i][j] = 3;
			cout << ans[i][j];
		}
		cout << '\n';
	}
}