프로그래밍공부노트

Day 29 - Java(짝수 마방진) 본문

JAVA

Day 29 - Java(짝수 마방진)

SANGJIN-YU 2021. 3. 23. 22:16
반응형

 62. 홀수 마방진(Magic Square) 검수 로직

6 1 8
7 5 3
2 9 4

가로 세로 대각선 역대각선의 합이 같다

 

a = {[0] {a[0],b[1],c[2]}, [1] {d[0],e[1],f[2]}, [2] {g[0],h[1],i[2]}};

 

모든 마방진은 가로n개 세로 n개 대각선 1개, 역대각선 1개로 구성되어 있다.

2*n+2개가 검수해야 할 대상의 개수이다.

모든 검수 대상은 배열에 담아서 같은 값이라면 마방진이 성공했다라 판단한다.

 

 62. 짝수 마방진(Magic Square) -1

    - 짝수 마방진(4,8,12)

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

    - 1차원의 값을 2차원의 값으로 변경

 

 1차원 : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 

 

 2차원

0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15

(x,y)

(0,0) 0 (0,1) 1 (0,2) 2 (0,3) 3 (4*x+y)   4로나눈 몫 , 4로나눈 나머지

(1,0) 4 (1,1) 5 (1,2) 6 (1,3) 7 (4*x+y)   

(2,0) 8 (2,1) 9 (2,2)10 (2,3) 11 (4*x+y)

 

첫번째 로직 : 1차원을 2차원 값으로 변경 (값/n,값%n) =  값+1

1차원을 2차원으로 바꾸는 방법

0 [0/4,0%4] = (0,0) 0+1;  

1 [1/4,1%4] = (0,1) 1+1;

2 [2/4,2%4] = (0,2) 2+1; 

3 [3/4,3%4] = (0,3) 3+1;

4 [4/4,4%4] = (1,0) 4+1;

5 [5/4,5%4] = (1,1) 5+1;

6   7   8   9   10   11   12   13   14   15

 

 

두번째 로직 : 2차원을 1차원 값으로 변경 

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

 

1 15 14 4
12 6 7 9
8 10 11 5
13 3 2 16

 

4x4에서 배열이 커지더라도 일반항은 같다(값이 변하는 부분이 포함되는 곳을 일반항으로) 1/4로 같다.

 

 1) 연산이 되어야 할 영역의 범위를 잡는다.

 2) for(int i = 0; i <square.length; i++){ // 행

       for(int j =0; j<square.length; j++){// 열

              if(i >= 0 && i<n/4 || i>= n/4*3 && i <n){

                      if( j >= n/4 && j < n/4*3){

                           square[i][j] = square.length * square.length -(i*square.length + j)

                 } else if(j >= 0 && j<n/4 || j>= n/4*3 && j <n){

                          square[i][j] = square.length * square.length -(i*square.length + j)

                 }

            }

        }


	public void make(int n) {
		for (int i = 0; i < square.length; i++) {
			for (int j = 0; j < square.length; j++) {
				square[i][j] = (n*i+j+1);
			}
		}
	private void makeA() {
		
		int len = square.length;		
		for (int i = 0; i < len*len; i++) { // 15까지 입력을 해야한다 여기 +1하면 16
			square[i/len][i%len] = i+1;
		}
	}

 

아래의 짝수 마방진 준비 코드

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

 

반응형