로직
처음 시작 지점은 ( 1 , 3 ) 이다.
현재 위치에서 왼쪽 위 대각선 방향으로 이동하면서 다음 숫자를 채운다.
행과 열을 감소시키면서 숫자를 채운다.
행과 열을 감소시키면서 숫자를 채운다.
행과 열을 감소 시키면서 숫자를 채우다가 행이 1보다 작으면 행은 5가 된다.
행과 열을 감소 시키면서 숫자를 채우다가 열이 1보다 작으면 열은 5가 된다.
채우는 숫자가 5의 배수의 다음 숫자(5n+1)일 경우 , 행만 1증가 시켜서 채운다.
구현
-
Code
MagicSquare.javapublic class MagicSquare{ int[][] MagicSquare; // int degree =5; int degree; public MagicSquare() { // TODO Auto-generated constructor stub } public MagicSquare(int degree) { this(); this.degree=degree; start(); } public void start(){ MagicSquare = new int[degree][degree]; int x=0; int y=degree/2; MagicSquare[x][y]=1; for(int pos=2; pos<=degree*degree; pos++){ x=x-1; y=y-1; if(x<0){ if(y>=0){ x=x+degree; }else{ x=x+2; y=y+1; } }else{ if(y<0){ y=y+degree; }else{ if(MagicSquare[x][y]!=0){ x=x+2; y=y+1; } } } MagicSquare[x][y]=pos; } for(int[] first:MagicSquare){ for(int value:first){ System.out.print(value+ " "); } System.out.println(); } } } -
Code
MagicSquareMain.javapublic class MagicSquareMain { public static void main(String[] args) { MagicSquare magicsquare =new MagicSquare(5); } } -
Result