[백준 / C언어] 10994번: 별 찍기 - 19

728x90
728x90

https://www.acmicpc.net/problem/10994

 

10994번: 별 찍기 - 19

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net

 

난이도: solved.ac 실버 4

 

 

알고리즘 분류


구현, 재귀

 

규칙


한 변의 길이가 4*N - 3인 N개의 정사각형으로 둘러쌓인 모양이다

 

구현


2차원 배열을 만들어서 각 N에 맞는 정사각형들을 그려준다

 

N = 4라면, 먼저 한 변의 길이가 4*4 - 3인 정사각형을 그려주고

 

그 다음 N = 3짜리인 한 변의 길이가 4*3 - 3인 정사각형을 그려주고

 

N = 2짜리인 한 변의 길이가 4*2 - 3인 정사각형을 그려주고

 

 N = 1짜리인 한 변의 길이가 4*1 - 3인 정사각형을 그려준다

 

 

위처럼 왼쪽 변, 아래쪽 변, 오른쪽 변, 위쪽 변 순서로 그려주었다

 

함수 void star(N, y, x)에서 인수 y와 x는 그릴 정사각형의 왼쪽 위 꼭지점의 좌표이다

 

y = 2, x = 2면 arr[2][2]를 의미하고 이 꼭지점부터 시작해 정사각형을 그린다

 

코드


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

char arr[400][400];
int max_len;
void star(int N, int y, int x);

int main() {
	int N, i, j;
	scanf("%d", &N);
	max_len = 4 * N - 3;

	for (i = 0; i < max_len; i++) {
		for (j = 0; j < max_len; j++)
			arr[i][j] = ' ';
	}

	star(N, 0, 0);

	for (i = 0; i < max_len; i++) {
		for (j = 0; j < max_len; j++)
			printf("%c", arr[i][j]);
		printf("\n");
	}
	return 0;
}

void star(int N , int y, int x) {
	int i, len = 4 * N - 3;
	for (i = 0; i < len; i++) {
		arr[y][x + i] = '*';	// 1번
		arr[y + i][x] = '*';	// 2번
		arr[max_len - 1 - y][x + i] = '*';	// 3번
		arr[y + i][max_len - 1 - x] = '*';	// 4번
	}
	if (N > 1)
		star(N - 1, y + 2, x + 2);
}
반응형