프로그래밍/CodeUp

CodeUp[Q_2610] : 그림판 채우기

조원일 2020. 4. 5. 18:15
728x90

1. 문제

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

 

그림판 채우기

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

codeup.kr

[출처 : 코드업(https://codeup.kr/)]

이번 문제는 그림판의 색 채우기 기능을 간략하게 구현해보는 문제입니다.

이번 문제 또한 재귀 함수를 사용하면 쉽게 해결할 수 있습니다.

 

 

2. 풀이방법

STEP 1. 주어진 좌표(x, y)부터 상,하,좌,우를 확인하여 '-'이면 '*'로 색칠한다.

 

 

3. 해답

#include <stdio.h>

void paint(char Arr[10][11], int x, int y) {
	if (x < 0 || x > 9) return 0;
	if (y < 0 || y > 9) return 0;

	if (Arr[x][y] == '*') return 0;

	Arr[x][y] = '*';

	paint(Arr, x - 1, y); // 좌
	paint(Arr, x + 1, y); // 우
	paint(Arr, x, y - 1); // 상
	paint(Arr, x, y + 1); // 하
}


int main() {
	int x, y;
	char Arr[10][11];
	for (int i = 0; i < 10; i++) {
		scanf("%s", Arr[i]);
	}
	scanf("%d %d", &x, &y);

	paint(Arr, y, x);

	for (int i = 0; i < 10; i++) {
		printf("%s\n", Arr[i]);
	}
	return 0;
}