import java.util.Scanner;

public class Ns2 {

public static void main (String[] args) {

System.out.println("달팽이 바퀴 수를 입력하시오 : ");

Scanner r = new Scanner(System.in);

int round = r.nextInt(); //바퀴수 입력받기

int j = 0; // 2차원 배열의 x값

int i = 0; // 2차원 배열의 y값

int high = 0; //달팽이 배열 맨 위

int low = round - 1; // 달팽이 배열 맨 아래

int left = 0; // 달팽이 배열 맨 왼쪽

int right = round -1; // 달팽이 배열 맨 오른쪽 

int n = 1; // 배열에 넣을 값

int[][] area = new int[round][round];//배열 범위 지정

for(;;) {

for(j = left,i = high ;j

area[i][j] = n;

n++;

}// → 방향으로 숫자 넣기

for(; i

area[i][j] = n;

n++;

}// ↓ 방향으로 숫자 넣기

for(j = right ;j > left;j--){

area[i][j] = n;

n++;

}// ← 방향으로 숫자 넣기

for(i = low; i > high ; i--) {

area[i][j] = n;

n++;

}// ↑ 방향으로 숫자 넣기

low--;

high ++;

left ++ ;

right --;

// 배열의 전체 범위를 한칸씩 줄여줌

if(round * round - n <= 4){ //짝수일 때 마무리

for(j = left, i = high ;j

area[i][j] = n;

n++;

}// → 방향으로 숫자 넣기

for(; i

area[i][j] = n;

n++;

}// ↓ 방향으로 숫자 넣기

for(j = right ;j >= left;j--){

area[i][j] = n;

n++;

}// ← 방향으로 숫자 넣기

break; //for문 빠져나가기

else if(round * round - n <= 1){ //홀수일 때 마무리

for(j = left, i = high ;j <= right;j++){

area[i][j] = n;

n++;

} //맨 마지막 숫자 넣기

break;//for문 빠져나가기

}

}

for(i = 0; i

for(j = 0; j

System.out.printf("%4d" ,area[i][j]);

}

System.out.println("");

}// 배열에 담긴 숫자 출력

}

}