Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 프로그래머스
- 기타제어자
- read()함수
- 자바클래스
- 자바실행방법
- 자바상수
- SQL
- 효율적인연산
- 자바제어문
- 팩토리얼재귀
- 자바수우미양가
- 반복문라벨
- 변수의 초기화
- 자바기타제어자
- 자바switch문
- 자바if문
- 변수명명규칙
- 자바자료형
- 자바연산자
- 오라클
- 자바접근지정자
- 자바형식
- 겟셋함수
- 자바별찍기
- 자바함수
- 연산자우선순위
- 누승재귀
- 클래스배열
- 오버로딩
- 중첩for문
Archives
- Today
- Total
h-i-s-t-o-r-y
[Java] 마방진(Magic Square) 본문
package days14;
import java.util.Random;
public class Ex01 {
public static void main(String[] args) {
final int SIZE = 5;
int [][] m = new int[SIZE][SIZE];
//1~25
// fillM01(m); //순서대로 번호 채워넣기
// fillShuffle02(m); //랜덤으로 번호 채워넣기
//25~1
// fillM02_01(m); //첫방부터 채워넣기
// fillM02_02(m); //끝방부터 채워넣기, 방을 찾아서 채워넣기
// fillM03(m); //지그재그 채워넣기
//마방진 - 짝수마방진, 홀수마방진(5*5)
magicSquare(m);
dispM(m);
}//main
private static void magicSquare(int[][] m) {
// 0행에 가운데 열에 1 (02)
// 규칙 - 5의배수라면 행만증가 아니라면 열증가 행감소
// 행 마이너스 벗어나면 가장 큰 행으로 이동 -1 -> 4행
// 열 큰범위 벗어나면 가장 작은 열로 이동 5 -> 0열
int n = 1;
int row = 0, col = m.length/2;
while (n <= 25) {
m[row][col] = n;
dispM(m);
if (n%5==0) {
row++;
} else {
col++; row--;
if (col==5) col = 0;
if (row==-1) row = 4;
}
n++;
}//while
/*
int i = 0;
int j = 2;
m[0][2] = 1;
int num = 1;
while (num < 25) {
if (num%5 == 0) i++;
else {
i--; j++;
// i = i>-1? i: i+5;
// j = j<5? j: j-5;
}
m[i][j] = ++num;
}//while
*/
}//magicSquare
private static void fillM03(int[][] m) {
/*
int n = 1;
boolean sw = false;
for (int i = 0; i < m.length; i++) {
if(!sw) {
for (int j = 0; j < m[i].length; j++) {
m[i][j] = n++;
}
}//if
else {
for (int j = m[i].length-1; j >=0; j--) {
m[i][j] = n++;
}
}//else
sw=!sw;
}//for
*/
// 행의 짝홀에 따라 값을 변화시켜서 저장
/*
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
m[i][j] = (i%2==0)? 5*i+j+1: 5*(i+1)-j;
}
}
*/
// 방의 위치를 변화시킴
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
// if (i%2==0) m[i][j] = 5*i+j+1;
// else m[i][4-j] = 5*i+j+1;
m[i][ (i%2==0)? j: 4-j ] = 5*i+j+1;
}
}
}
private static void fillM02_02(int[][] m) {
/* 끝방에서부터
int n = 1;
for (int i = m.length-1; i >=0; i--) {
for (int j = m[i].length-1; j >=0; j--) {
m[i][j] = n++;
}
}
*/
// 원하는 위치의 방을 찾아서 채워넣기
int n = 25;
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
m[4-i][4-j] = 5*i+j+1;
}
}
}//fillM02_02
private static void fillM02_01(int[][] m) {
/*
int n = 25;
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
m[i][j] = n--;
}
}
*/
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
// m[i][j] = 25 - (5*i+j);
// m[i][j] = 5*(5-i) - j;
}
}
}//fillM02_01
private static void fillShuffle02(int[][] m) {
Random rnd = new Random();
int n = 1;
int row, col;
while (n <= 25) {
row = rnd.nextInt(5);
col = rnd.nextInt(5);
if ( m[row][col] == 0 ) { //아직 채워지지 않았는지 여부 체크
m[row][col] = n++;
}
}
}
private static void fillM01(int[][] m) {
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
// 열개수 *i
m[i][j] = 5*i + j + 1;
}
}
}
private static void dispM(int[][] m) {
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
//출력
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
System.out.printf("[%02d]", m[i][j]);
}
System.out.println();
}
}
}//class
'Java' 카테고리의 다른 글
[Java] 입력한 정수 n의 근사치인 배열 요소 찾기 (0) | 2021.07.16 |
---|---|
[Java] 자바 등차수열, 피보나치 수열 (0) | 2021.07.16 |
[Java] 자바 ego(자아) (0) | 2021.07.16 |
[Java] ArrayList 클래스 (0) | 2021.07.16 |
[Java] 입력, 수정, 삽입, 삭제, 출력, 검색, 종료 프로그램 (0) | 2021.07.16 |
Comments