본문 바로가기
Tech-Algorithm

Spiral Matrix

by redcrow 2018. 7. 12.

자주 접하는 문제임에도 익숙해지지 않는 Spiral Matrix. 


n by n 배열에  우->하->좌->상으로 돌리면서 숫자를 배열하는 방식이다.


 0  1  2  3  4  5 

19 20 21 22 23  6 

18 31 32 33 24  7 

17 30 35 34 25  8 

16 29 28 27 26  9 

15 14 13 12 11 10 


깔끔한 알고리즘이 많이 있지만 한방향에만 특화되어있고,  좌, 우 방향 모두 써먹을 수 있는건 단순한 알고리즘이 최고인듯하다.


public class SpiralArray {

public static void main(String[] args) {

int iArraySize = 6;

int[][] arrResult = makeSpiralArray(iArraySize);

for(int i=0 ; i< arrResult.length ; i++){

for(int j=0 ; j< arrResult.length ; j++){

int iSpaceCnt = Integer.toString(iArraySize*iArraySize).length() - Integer.toString(arrResult[i][j]).length();

for(int k=0 ; k < iSpaceCnt ; k++ ) {

System.out.print(" ");

}

System.out.print(arrResult[i][j]);

System.out.print(" ");

}

System.out.println("");

}

}

public static int[][] makeSpiralArray(int size){

int[][] sSpiralArray =  new int[size][size];

int maxRow = size -1;

int maxCol = size -1;

int minRow = 0;

int minCol = 0;

int k = 0;

while (k < size*size) {

for( int j = minCol ; j < maxCol ; j++) {

sSpiralArray[minRow][j] = k;

k++;

}

for( int i = minRow ; i < maxRow ; i++) {

sSpiralArray[i][maxCol] = k;

k++;

}

for( int j = maxCol ; j > minCol ; j--) {

sSpiralArray[maxRow][j] = k;

k++;

}

for( int i = maxRow ; i > minRow ; i--) {

sSpiralArray[i][minCol] = k;

k++;

}

minCol++;

minRow++;

maxRow--;

maxCol--;

}

return sSpiralArray;

}


}



'Tech-Algorithm' 카테고리의 다른 글

동적프로그래밍 - 배낭 채우기 문제(Knapsack Problem)  (0) 2022.06.14
Matrix Rotate  (0) 2018.07.12

댓글