아직 계정이 없으신가요? 회원가입

Dev. Talk

반례 부탁드립니다! [21년 재직자 대회 예선] 이미지 프로세싱

회원사진ryucha
69 views2021-12-29 11:02


#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int cnt=0;

int chk(int** arr, int Xi, int Xj, int H, int W, int* NXi, int* NXj, int* SXi, int* SXj, int In)
{
	int flag=0;
	if(Xi-2 >= 0)
	{	
		if((arr[Xi-1][Xj-1] ==In) && (arr[Xi-2][Xj-1]==In))
		{
			flag=1;
			*NXi = Xi-1;
			*NXj = Xj;
		}
	}
	
	if(Xj-2 >= 0)
	{	
		if((arr[Xi-1][Xj-1] ==In) && (arr[Xi-1][Xj-2]==In)) 
		{
			if(flag==0)
			{			
				flag=1;
				*NXi = Xi;
				*NXj = Xj-1;
			}
			
			else
			{
				SXi[cnt] = Xi;
				SXj[cnt] = Xj-1;
				
				cnt++;
			}
			
		}
	}
	
	if(Xi < H)
	{	
		if((arr[Xi-1][Xj-1]==In) && (arr[Xi][Xj-1]==In))
		{
			if(flag==0)
			{			
				flag=1;
				*NXi = Xi+1;
				*NXj = Xj;
			}
			
			else
			{
				SXi[cnt] = Xi+1;
				SXj[cnt] = Xj;
				
				cnt++;
			}
			
		}
	}
	
	if(Xj < W)
	{	
		if((arr[Xi-1][Xj-1]==In) && (arr[Xi-1][Xj]==In))
		{
			if(flag==0)
			{			
				flag=1;
				*NXi = Xi;
				*NXj = Xj+1;
			}
			
			else
			{
				SXi[cnt] = Xi;
				SXj[cnt] = Xj+1;
				
				cnt++;
			}
			
		}
	}
	
	if(flag==0)
	{
		
				*NXi = 0;
				*NXj = 0;
	}
	
	return flag;
}

int main(int argc, char** argv) {
	int H, W, I, Q, Xi, Xj, C, In;
	int** arr;
	int * SXi;
	int * SXj;
	
	int test_cnt=0;
	
	int lXi,lXj; 
	int NXi, NXj;
	
    std::cin>>H;
    std::cin>>W;
    
    arr = new int* [H];
    SXi = new int[H*W];
    SXj = new int[H*W];
        
    for (int i = 0; i < H; i++)
    { 
     	arr[i] = new int[W];
    }
    
    for(int i=0;i<H;i++)
    {
    	for(int j=0;j<W;j++)
    	{
    		std::cin>>I;
    		arr[i][j] = I;
		}
	}
	 
    std::cin>>Q;
    
    for(int i=0;i<Q;i++)
    {
    	std::cin>>Xi>>Xj>>C;
    	
    	lXi = Xi;
    	lXj = Xj;
    	In = arr[lXi-1][lXj-1];
    	//같은 값 체크로직 
    	while((chk(arr,lXi,lXj,H,W,&NXi, &NXj,SXi,SXj, In)==1)||(cnt>0))
    	{
			arr[lXi-1][lXj-1] = C;
    		
    		if((NXi==0)&&(NXj==0)&&(cnt>0))
    		{
    			lXi = SXi[cnt-1];
    			lXj = SXj[cnt-1];
    			SXi[cnt-1] = 0;
    			SXj[cnt-1] = 0;
    			cnt--;
			}
			
			else
			{
	    		lXi = NXi;
	    		lXj = NXj;
			}
    		
    		test_cnt++;
		}
		
    	arr[lXi-1][lXj-1] = C;   
    	
	}
	
	for(int i=0;i<H;i++)
	{
		for(int j=0;j<W;j++)
		{
			std::cout<<arr[i][j]<<" ";
		}
		std::cout<<"\n";
	}
	 
	for(int i=0;i<H;i++)
	{
		delete[] arr[i];
	}
	
	delete[] arr;
	delete[] SXi;
	delete[] SXj;
	
	return 0;
}


반례 찾기가 힘드네요ㅠ 감사합니다.