목차
마방진.hwp…………………………………6p
1. 마방진의 의미
2. 마방진 알고리즘 설명
(1) 홀수인 경우
(2) 짝수인 경우
1) 4배수인 경우
2) 4배수 아닌 경우
3. 마방진 생성 프로그램 구현
(1) 프로그램 동작 설명
(2) 프로그램 실행 화면 첨부
4. java 소스 첨부
MagicSquare.java
6.72KB
1. 마방진의 의미
2. 마방진 알고리즘 설명
(1) 홀수인 경우
(2) 짝수인 경우
1) 4배수인 경우
2) 4배수 아닌 경우
3. 마방진 생성 프로그램 구현
(1) 프로그램 동작 설명
(2) 프로그램 실행 화면 첨부
4. java 소스 첨부
MagicSquare.java
6.72KB
본문내용
1. 마방진의 의미
마방진이란 연속된 자연수를 가로, 세로, 대각선의 합이 같아지도록 정사각형 모양으로 배열한 것을 말하며, 크기 N × N인 마방진을 N차 마방진이라고도 한다. 보통 크기가 1, 2인 마방진은 고려하지 않는다.
2. 마방진 알고리즘
마방진을 구하는 알고리즘은 크게 3가지로 구분할 수 있다. 크게 크기가 홀수, 짝수인 경우로 나눌 수 있고, 짝수인 경우에는 다시 4의 배수인 경우와 4의 배수가 아닌 경우로 나눌 수 있다. 이하 각각의 경우에 마방진을 구하는 알고리즘을 알아본다.
(1) 크기가 홀수인 경우
알고리즘은 기준점을 어디에 놓느냐에 따라 달라지긴 하나 근본적으로는 동일하다. 기준점을 기준으로 모든 연산을 대칭적으로 수행하면 된다.
1) 마지막 행의 가운데 열에 1을 배치한다.
≪ 그 림 ≫
2) 항상 오른쪽 아래 칸을 검사한다. 비어 있으면 다음 숫자를 기입하고 비어 있지 않으면 마지막 위치에서 바로 위로 이동한다. 그 외의 경우는 아래와 같다.
① 행을 벗어난 경우 가장 위쪽 행으로 이동한다. (그림 가)
② 열을 벗어난 경우 가장 왼쪽 열로 이동한다. (그림 나)
③ 행과 열을 동시에 벗어난 경우 마지막 위치에서 바로 위로 이동한다. (그림 다)
≪ 그 림 ≫ ≪ 그 림 ≫ ≪ 그 림 ≫
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
MagicSquare.java
import java.io.*;
public class MagicSquare {
//-----------------------------------------------------------------
// 사용자로부터 만들고 싶은 마방진 크기를 입력받기
//-----------------------------------------------------------------
private static int readSize() throws IOException {
int s;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try {
do {
System.out.print(\\"마방진 크기를 입력하세요 (3이상) =>\\");
s = Integer.parseInt(in.readLine());
if ( s <= 2 )
System.out.println(\\"3이상의 숫자만 허용됩니다.\\");
} while ( s < 3 );
} catch(NumberFormatException e) {
System.out.println(\\"잘못된 입력입니다. 숫자만 입력해주세요.\\");
s = readSize();
}
return s;
}//readSize END
//-----------------------------------------------------------------
// 짝수 마방진 생성 (4의 배수인 경우)
//-----------------------------------------------------------------
private static int[][] makeEvenMSFour(int n) {
int i, j; //for문용
int[][] ms = new int[n][n]; //마방진 저장할 변수
int t; //스왑용
for( i = 0; i < n; i++ ) //빈 마방진에 행, 열 순서로
for( j = 0; j < n; j++ ) //숫자를 차례로 채워넣는다
ms[i][j] = i * n + j + 1;
for( i = 0; i < n/2; i++ ) //행, 열을 1:2:1로 나누어
마방진이란 연속된 자연수를 가로, 세로, 대각선의 합이 같아지도록 정사각형 모양으로 배열한 것을 말하며, 크기 N × N인 마방진을 N차 마방진이라고도 한다. 보통 크기가 1, 2인 마방진은 고려하지 않는다.
2. 마방진 알고리즘
마방진을 구하는 알고리즘은 크게 3가지로 구분할 수 있다. 크게 크기가 홀수, 짝수인 경우로 나눌 수 있고, 짝수인 경우에는 다시 4의 배수인 경우와 4의 배수가 아닌 경우로 나눌 수 있다. 이하 각각의 경우에 마방진을 구하는 알고리즘을 알아본다.
(1) 크기가 홀수인 경우
알고리즘은 기준점을 어디에 놓느냐에 따라 달라지긴 하나 근본적으로는 동일하다. 기준점을 기준으로 모든 연산을 대칭적으로 수행하면 된다.
1) 마지막 행의 가운데 열에 1을 배치한다.
≪ 그 림 ≫
2) 항상 오른쪽 아래 칸을 검사한다. 비어 있으면 다음 숫자를 기입하고 비어 있지 않으면 마지막 위치에서 바로 위로 이동한다. 그 외의 경우는 아래와 같다.
① 행을 벗어난 경우 가장 위쪽 행으로 이동한다. (그림 가)
② 열을 벗어난 경우 가장 왼쪽 열로 이동한다. (그림 나)
③ 행과 열을 동시에 벗어난 경우 마지막 위치에서 바로 위로 이동한다. (그림 다)
≪ 그 림 ≫ ≪ 그 림 ≫ ≪ 그 림 ≫
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
MagicSquare.java
import java.io.*;
public class MagicSquare {
//-----------------------------------------------------------------
// 사용자로부터 만들고 싶은 마방진 크기를 입력받기
//-----------------------------------------------------------------
private static int readSize() throws IOException {
int s;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try {
do {
System.out.print(\\"마방진 크기를 입력하세요 (3이상) =>\\");
s = Integer.parseInt(in.readLine());
if ( s <= 2 )
System.out.println(\\"3이상의 숫자만 허용됩니다.\\");
} while ( s < 3 );
} catch(NumberFormatException e) {
System.out.println(\\"잘못된 입력입니다. 숫자만 입력해주세요.\\");
s = readSize();
}
return s;
}//readSize END
//-----------------------------------------------------------------
// 짝수 마방진 생성 (4의 배수인 경우)
//-----------------------------------------------------------------
private static int[][] makeEvenMSFour(int n) {
int i, j; //for문용
int[][] ms = new int[n][n]; //마방진 저장할 변수
int t; //스왑용
for( i = 0; i < n; i++ ) //빈 마방진에 행, 열 순서로
for( j = 0; j < n; j++ ) //숫자를 차례로 채워넣는다
ms[i][j] = i * n + j + 1;
for( i = 0; i < n/2; i++ ) //행, 열을 1:2:1로 나누어
소개글