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