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