< 문제 >
-
개요
[달팽이 로직]
5*5 2차원 배열안에 양수를 달팽이 모양으로 차례로 채웁니다. -
예상 결과
예상 결과는 하기 코드 실행시 예상되는 결과 값이다.
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
< 정답풀이 >
public class Test06 {
public static void main( String[] args ) {
// 시작시간 기록
long startTime = System.currentTimeMillis();
int size = 5; // 배열의 크기
process( size );
// 종료시간 기록
long endTime = System.currentTimeMillis() - startTime;
System.out.println( "소요시간 : " + endTime + "ms." );
}
/**
*
* <PRE>
* 달팽이형태로 2차원 배열 채우기
* </PRE>
*/
public static void process( int size ) {
int num = 1; // 배열안에 저장될 값(1부터 시작)
int offset = 1; // 저장의 방향(1: 양, -1: 음)
int i = 0, j = -1; // 배열 Index(i, j)
int[][] matrix = new int[size][size]; // 2차원 배열
while ( size > 0 ) {
// STEP 1. 가로열 채우기(Offset 만큼 이동하면서 num++를 채움)
for ( int inx = 0 ; inx < size ; inx++ ) {
j += offset;
matrix[i][j] = num++;
}
// STEP 1-1. 가로열에서 세로열로 변경시 채워야할 칸이 한칸 씩 줄어든다.
size--;
// STEP 2. 세로열 채우기(Offset 만큼 이동하면서 num++를 채움)
for ( int inx = 0 ; inx < size ; inx++ ) {
i += offset;
matrix[i][j] = num++;
}
// STEP 3. 가로열과 세로열을 모두 채우면 방향을 바꾼다.
offset = -offset;
}
// STEP 4. 저장한 결과를 출력한다.
printArray( matrix );
}
/**
*
* <PRE>
* 배열을 출력한다.
* </PRE>
*
* @param arr 배열
*/
public static void printArray( int[][] arr ) {
int size = arr.length;
for ( int row = 0 ; row < size ; row++ ) {
for ( int col = 0 ; col < size ; col++ ) {
System.out.printf( "%3d", arr[row][col] );
}
System.out.println();
}
System.out.println();
}
}