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("");
}// 배열에 담긴 숫자 출력
}
}
정처기합격ㅡ
초보라 매번 for문으로 방향을 돌리는건 어쩔 수 없지. 일단 구글에서 java spiral array로 검색해서 그 중에 가장 개쩌는 걸 보고 그 로직을 이해한 다음에 직접 다시 짜봐 그게 좋을 것 같다