#include<stdio.h>
void main(void){
int ar[100][100];
int x1 =0 , x2, y1 =0, y2 ; //벽
int vx=1,vy=0; //백터
int x=-1,y=0; //배열에 들어갈 현재 값.
int n ; // 배열의 크기
int i,j,su=0;
scanf("%d",&n);
//n=5;
y2 = n-1;
x2 = n-1;
for(i=0;i<n;i++){
for(j=0;j<n;j++)ar[i][j]=0;
}
printf(" su x y vx vy x1 x2 y1 y2 \n");
while(su<n*n){ ///n*n){
x+=vx;
y+=vy;
ar[y][x] = ++su;
printf("%3d %3d %3d %3d %3d %3d %3d %3d %3d \n",su,x,y,vx,vy,x1,x2,y1,y2);
if(x==x2 && vy==0 && vx==1 ){ //하로 (우일때)
//printf("하\n");
vx=0;
vy=1;
y1+=1; //윗벽을 없앰.
}
if(y==y2 && vy==1 && vx==0 ){//좌로 (후일때)
//printf("좌\n");
vx=-1;
vy=0;
x2-=1; //오른쪽 벽을 없앰.
}
if(x==x1 && vy==0 && vx==-1 ){ //위로 (좌일때)
//printf("상\n");
vx=0;
vy=-1;
y2-=1; //아래벽을 없앰..
}
if(y==y1 && vy==-1 && vx==0 ){//우로 (상일때)
//printf("우\n");
vx=1;
vy=0;
x1+=1; //왼쪽벽을 없앰..
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++)printf("%3d",ar[i][j]);
printf("\n");
}
}

출력결과