class Spiral {
static final int SIZE= 4; // 달팽이 배열의 크기
static int[][] num = new int[SIZE][SIZE]; // 결과를 담을 배열
static int cnt=0; // 달팽이 배열에 담을 숫자
static int row=0;
static int col=-1;
public static void main(String args[]) {
spiral(SIZE, 1);
for( int i=0; i < SIZE; i++) {
for(int j=0; j < SIZE; j++)
System.out.print(fmt(num[i][j],3));
System.out.println();
}
}
// 달팽이 배열에 숫자를 채우는 함수.
// 방향을 바꾸고, n의 숫자를 줄여가며, 재귀적으로 반복해서 호출된다
// n : 채워넣을 숫자의 갯수
// dir : 채워넣을 방향
// dir이 양수면 좌->우, 상->하로 출력하고,
// dir이 음수면 이와 반대로 출력한다.
static void spiral(int n, int dir) {
if (n==0) return; // n은 채울 숫자의 갯수, 0이면 끝낸다.
for(int i=0; i < 2*n-1; i++) {
if(i < n)
col+=dir;
else
row+=dir;
num[row][col] = ++cnt;
}
spiral(n-1, -dir);
}
// 출력형식 맞추는 함수
static String fmt(int num, int col) {
String tmp = " "; // 충분히 큰 크기의 공백
String numStr = tmp + num;
return numStr.substring(numStr.length()- col);
}
}
/*
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
계속하려면 아무 키나 누르십시오 . . .
*/
/*
SIZE* SIZE크기의 배열을 생성해서 카운터의 수를 하나씩 증가시켜가며,
일정한 규칙에 의해 배열을 채웁니다.
spiral은 정해진 개수의 수를, 주어진 방향으로 채워넣습니다.
방향의 값이 양수면, 왼쪽에서 오른쪽으로 그리고 위에서 아래로 값을 채워넣습니다.
(주어진 개수만큼만)
방향이 음수면 이와는 반대의 방향으로 숫자채워넣기를 진행합니다.
fmt함수는 출력의 모양을 보기 좋게 하기 위해 공백을 추가해주는 함수입니다.
*/
'IT_Programming > Java' 카테고리의 다른 글
시간이 증가하는 Timer (0) | 2007.02.06 |
---|---|
시간이 감소하는 타이머 (0) | 2007.02.06 |
난수값 생성 후, 빈도 수에 따른 그래프그리기 (0) | 2007.02.06 |
정규식(Regular Expression) 예제 (0) | 2007.02.06 |
인터페이스 (0) | 2007.02.06 |