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

728x90
728x90

슬라이드1.JPG

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

 

10994번: 별 찍기 - 19

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

www.acmicpc.net

etc-image-1
etc-image-2
etc-image-3

 

난이도: 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인 정사각형을 그려준다

 

화면 캡처 2023-06-16 030844.png

 

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

 

함수 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);
}
반응형