머리쓰기/알고리즘

마방진.

윈플. 2011. 12. 23. 18:28
방진 or 마방진?
영어로 Magic Square.
 

요약
1에서 n2까지의 정수를 n행 n열의 정사각형 모양으로 나열하여 가로·세로·대각선의 합이 전부 같아지도록 한 것. 

 
 홀수방진
n=3인 경우, 즉 3방진의 경우를 보기로 들면 다음과 같다. ⑴ 맨 윗줄 중앙에 1을 쓴다. ⑵ 오른쪽 위의 대각선 방향으로 2, 3, 4,…를 차례로 쓴다. ⑶ 수를 쓴 자리가 위쪽으로 가버릴 때는 그 수를 쓸 자리의 열의 맨 아래 칸에 쓴다. ⑷ 수를 쓴 자리가 오른쪽으로 나가버릴 때는 그 수를 쓸 행의 왼쪽 끝 칸에 쓴다. ⑸ 오른쪽 위의 칸에 이미 숫자가 들어 있거나 오른쪽 위의 코너에 왔을 때는 그 수의 바로 아래 칸에 쓴다.

 짝수방진
짝수방진을 만드는 일반적인 규칙은 없다. 여기서는 4방진을 만드는 방법을 소개한다. ⑴ 먼저와 같이 1~16까지를 차례로 써넣는다. ⑵ 대각선을 그어 대각선 위에 있는 수를 ∥표를 중심으로 하여 서로 점대칭의 위치에 있는 것끼리 바꾸어 놓는다.   



 
[출처 네이버 백과사전]







뿌리깊은 나무에서는 세종(이도)께서 빈 참합을 보고 풀이 법을 제시하였다는데... 

알고보면 간단한 마방진 풀이법.

홀수방진.

1.  n방진에 +1칸을 추가
2.  가운데부터 순서대로 방향은 상관없이 나열.
3.  칸 이외의 칸에 있는 숫자를 반대쪽으로 넣으면 끝.


or




짝수방진.

1.  n방진에 차례대로 나열.
2.  대각선으로 뒤바꾸면 끝.






뿌리깊은 나무라는 드라마를 통해 많은 사람들이 방진과 한글의 위대함에 알게 된 것 같습니다.



마방진 알고리즘.

1.  만들 n방진의 n 입력.

2.  if( n%2 ) 짝수 인지 홀수인지 따라 다른 방법

2.1 홀수
(1)  n배열의 + 2 크기로 생성
(2)  2n-1 , 즉 1,3,5 ... 순으로 시작지점 달리 나열
(3)  원래 칸 이외의 수 체워넣기.

2.2 짝수 
(1)  순서대로 숫자 체우기
(2)  대각선으로 뒤바꾸기
(3)  반대 대각선 뒤바꾸기 
 
3.  끝.