요래 한번 짜 봣음
오랜만에 짜니까 너저분 하네;;

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x =0;    int sx = 0;
    int **map;   int mc=1;
    int fc = 0;  int fc2 = 0;
    int max = 0;    //정사각형만 고려 
    int num = 1; //배열에 들어갈 숫자 
        
    scanf("%d",&max);
    
    //동적할당 
    map = (int**)malloc(sizeof(int*)*max);
    for(fc=0; fc < max; fc++)map[fc] = (int*)malloc(sizeof(int)*max);
    
    while(mc < max*2)
    {
      for(x = sx; x < mc-sx; x++)map[x][mc-x-1] = num++;
      if(mc >= max) sx++;
      mc++;
    }
    
    //출력루틴 
    for(fc = 0 ; fc < max; fc++)
    {
     for(fc2 = 0; fc2 < max; fc2++)
     printf("%d\t ",map[fc][fc2]);
     printf("\n");
    }

    for(fc=0; fc < max; fc++)
    free(map[fc]);
    free(map);  
    
    system("pause");
    return 0;