본문 바로가기

알고리즘

[C/C++] 코드업(codeup) 2610번 그림판 채우기

▽문제 바로가기

https://codeup.kr/problem.php?id=2610

 

그림판 채우기

$10*10$ 크기의 그림이 있다. 이 그림에 그림판 색 채우기 기능을 구현하시오. (단, 원점은 왼쪽 위 끝이고, $x$ 값은 오른쪽, $y$ 값은 아래로 갈수록 증가한다.)

codeup.kr


입력

10∗10 크기의 그림과 색칠할 좌표의 x,y 값이 차례로 입력된다.

_ 는 색칠되지 않은 부분이고 * 는 색칠된 부분이다.

 

출력

색 채우기를 한 결과를 출력한다.

 

문제 풀이

 

배열 범위를 제외하면 크게 신경 쓸 부분이 없었습니다. x, y는 각각 열과 행입니다. 각 배열은 [0]부터 [9]까지 입니다.

 

#include <stdio.h>

//using namespace std;

char arr[11][11];

void paint(int row, int col){
	//범위밖이면 리턴
	if(row==-1||col==-1||row==10||col==10) return;
	
	//색칠된 테두리라면 리턴 
	if(arr[row][col]=='*') return;
	
	//색칠안된 부분이라면 색칠
	if(arr[row][col]=='_') arr[row][col] = '*';
	
	//상, 하, 좌, 우 로 탐색
	paint(row-1, col);
	paint(row+1, col);
	paint(row, col-1);
	paint(row, col+1);
}

int main(){
	
	for(int i=0;i<10;i++){
		scanf("%s", arr[i]);
	}
	
	int x, y;
	scanf("%d%d", &x, &y);
	paint(y, x);
	
	for(int i=0;i<10;i++){
		for(int j=0;j<10;j++){
			printf("%c", arr[i][j]);
		}
		printf("\n");
	}
	
}