문제

링크

풀이

#include <stdio.h>
 
int n;
char map[1024][2048];
 
void triangle(int k, int x, int y) {
  int size = (1<<k)-1;
 
  if (k % 2 == 1) {
    for (int i=0; i<size; i++) {
      map[y+i][x-i] = '*';
      map[y+i][x+i] = '*';
      map[y+size-1][x-i] = '*';
      map[y+size-1][x+i] = '*';
    }
  } else {
    for (int i=0; i<size; i++) {
      map[y-i][x-i] = '*';
      map[y-i][x+i] = '*';
      map[y-size+1][x-i] = '*';
      map[y-size+1][x+i] = '*';
    }
  }
}
 
int main(void) {
  scanf("%d", &n);
 
  int width = (1<<(n+1))-3;
  int height = (1<<n)-1;
 
  for (int i=0; i<height; i++) {
    for (int j=0; j<width; j++) {
      map[i][j] = ' ';
    }
  }
 
  int y = n % 2 == 1 ? 0 : height-1;
  for (int i=n; i>=1; i--) {
    triangle(i, width-height, y);
    if (i % 2 == 1) y += ((1<<i)-3);
    else y += (3-(1<<i));
  }
 
  for (int i=0; i<height; i++) {
    for (int j=width-1; j>=0; j--) {
      if (map[i][j] == ' ') map[i][j] = '\0';
      else break;
    }
  }
 
  for (int i=0; i<height; i++) {
    for (int j=0; j<width; j++) {
      if (map[i][j] != '\0') printf("%c", map[i][j]);
      else break;
    }
    printf("\n");
  }
  return 0;
}