728x90
728x90
https://www.acmicpc.net/problem/10994
난이도: 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);
}
반응형