프로그래밍공부노트

Day 30 - Java(짝수 4마방진, 기타 10마방진 ) 본문

JAVA

Day 30 - Java(짝수 4마방진, 기타 10마방진 )

SANGJIN-YU 2021. 3. 24. 21:03
반응형

 

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

 

	private void makeA() {
		
		int len = square.length;		
		for (int i = 0; i < len*len; i++) { 
			square[i/len][i%len] = i+1; // 1부터 입력해야하는데 i는 0부터 시작하니까 +1한다
		}
	}

(x,y)

(0,0) 1 (0,1) 2 (0,2) 3 (0,3) 4

(1,0) 5 (1,1) 6 (1,2) 7 (1,3) 8   

(2,0) 9 (2,1) 10 (2,2)11 (2,3) 12

(3,0) 13 (3,1) 14 (3,2) 15 (3,3) 16

 

	private void makeB() {
		int len = square.length;
		for (int i = 0; i < square.length; i++) {
			for (int j = 0; j < square.length; j++) {
				if (i >=0 && i< len/4 || i >= len/4*3 && i < len) {
					if (j >= len/4 && j <len/4*3) {
						square[i][j] = (len*len)-(i*len+j);
					}
				} else {
					if(j >=0 && j< len/4 || j >= len/4*3 && j < len) {
					square[i][j] = (len*len)-(i*len+j);
				}
			}
		}
	}
}

 62. 마방진(Magic Square) - 기타 마방진(의존 관계에 있어 홀수마방진 필요)

    - 홀수 마방진(3,5,7,9) / 짝수 마방진(4,8,12) / 기타마방진 : 나눠 홀수 마방진이 되는 수 (6, 10, 14)

 

 

 1) 10(i축) X 10(j축)의 마방진 4개의 영역으로 나눈다. 4개의 영역을 A B C D라고 칭한다.

 2) A(노란색)영역에서 열의 n/4만큼을 3으로 채운다. 여기서 열의 index가 n/4와 같아지는 위치는 j의 값을 +1해주고 그 결과의  위치에 3을 채운다.


  3) B영역(초록색)에서 뒤에서 n/4-1만큼 1을 채우고 나머지는 2로 채운다 .

  4) 채우는 순서는 1을 먼저 채우고마지막 줄을 제외하고 다시 2를 채워 넣는다.


 5) 아래에 남은 두 영역을 각자 자신의 위의 영역과 매칭하여 값을 변경하며 넣어준다.

 6) 주황색 영역과 연두색 영역을 그대로 아래로 내려서 겹치게 놓은 다음 주황색 영역에서 3이 있는 곳에는 0을, 0이 있는 곳에는 3을 입력하고 연두색 영역이 내려오는 부분은 2가 있는 곳에 1을, 1이 있는 곳에 2를 입력한다.

 


 7) 모든 영역의 값에 n/2*n/2를 곱한다.(길이/2*길이/2) 위의 예시에서는 (10/2)*(10/2) = 25이기 때문에 25를 곱한다

 8) 이렇게 완성이 되면 n/2인 홀수 마방진을 생성하여 각 영역에 더한다. 현재 10마방진이기 때문에 5마방진을 더한다.

 9) 아래의 작은 5마방진을 각영역에 맞춰서 더하면 완성


기타 (10)마방진 완성

반응형

'JAVA' 카테고리의 다른 글

DOM -> XML로  (2) 2021.11.22
Day 50, 51 - IO(InputStream, OutputStream)  (0) 2021.04.26
Day 29 - Java(짝수 마방진)  (0) 2021.03.23
Day 27 - Java(예외 처리 정리, 마방진)  (0) 2021.03.19
Day 26 - Java(Cloneable)  (0) 2021.03.18