문제

링크

풀이

#include <stdio.h>
 
char map[400][400];
 
void fill(int n) {
  int w = 4*n-3, h = 4*n-1;
 
  for (int i=0; i<w; i++) map[0][w-1-i] = '*';
  for (int i=0; i<h; i++) map[i][0] = '*';
  for (int i=0; i<w; i++) map[h-1][i] = '*';
  for (int i=0; i<w; i++) map[h-1-i][w-1] = '*';
 
  for (int i=2; i<2*n-2; i+=2) {
    for (int j=0; j<w-2*(i-1); j++) map[i][w+1-i-j] = '*';
    for (int j=0; j<h-2*i; j++) map[i+j][i] = '*';
    for (int j=0; j<w-2*i; j++) map[h-1-i][i+j] = '*';
    for (int j=0; j<h-2*(i+1); j++) map[h-1-i-j][w-1-i] = '*';
  }
 
  for (int i=0; i<3; i++) map[2*n-2][2*n-i] = '*';
  for (int i=0; i<3; i++) map[2*n-2+i][2*n-2] = '*';
}
 
int main(void) {
  int n;
 
  for (int i=0; i<400; i++) {
    for (int j=0; j<400; j++) {
      map[i][j] = ' ';
    }
  }
 
  scanf("%d", &n);
  if (n == 1) {
    printf("*");
    return 0;
  }
  fill(n);
 
  for (int i=0; i<4*n-1; i++) {
    if (i == 1) {
      printf("*\n");
      continue;
    }
    for (int j=0; j<4*n-3; j++) {
      printf("%c", map[i][j]);
    }
    printf("\n");
  }
  return 0;
}