접근 방법
- bfs로 탐색하며 값이 타겟과 값이 같은 픽셀은 값 변경
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
vector<vector<int>> img;
int h, w;
void isp(int i, int j, int c){
int x, y, nx, ny;
int target = img[i-1][j-1];
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
queue<vector<int>> que;
vector<int> temp = {i-1, j-1};
if(target == c){return;}
else{
img[i-1][j-1] = c;
}
que.push(temp);
while(!que.empty()){
x = que.front()[0];
y = que.front()[1];
que.pop();
for(int k = 0; k < 4; ++k){
nx = x + dx[k];
ny = y + dy[k];
if(nx < 0 || ny < 0 || nx >= h || ny >= w) {continue;}
if(img[nx][ny] == target){
img[nx][ny] = c;
temp = {nx, ny};
que.push(temp);
}
}
}
}
int main(int argc, char** argv)
{
int q, x, y, c;
scanf("%d %d", &h, &w);
img = vector<vector<int>>(h, vector<int>(w, 0));
// 이미지 입력
for(int i = 0; i < h; ++i){
for(int j = 0; j < w; ++j){
scanf("%d", &img[i][j]);
}
}
scanf("%d", &q);
for(int i = 0; i < q; ++i){
scanf("%d %d %d", &x, &y, &c);
isp(x, y, c);
}
// 결과 출력
for(int i = 0; i < h; ++i){
for(int j = 0; j < w; ++j){
printf("%d ", img[i][j]);
}
printf("\n");
}
return 0;
}