[Softeer] 이미지 프로세싱

CHAEN·2022년 9월 10일
0

problem solving

목록 보기
27/33

문제

접근 방법

  • bfs로 탐색하며 값이 타겟과 값이 같은 픽셀은 값 변경

나의 풀이 - C++

#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;
}
profile
공부중입니다

0개의 댓글

관련 채용 정보