min's devlog

5x5 마방진 본문

til/Algorithm

5x5 마방진

값진 2022. 4. 7. 09:55

마방진

5x5 마방진의 규칙

  - 중간 열에서 시작
  - 오른쪽 대각선 상향 방향으로 진행
  - 행이 0배열을 벗어나면 마지막 행으로
  - 열이 5열을 벗어나면 첫번째 열로
  - 5의 배수일 경우 +1 행만 이동
  - SQ(R,C(행,열))

 

코드

public class Mabangjin {
	public Mabangjin(int num) {
		start(num);
	}
	
	int[][] mabang;
	
	public void start(int num) {
		mabang = new int[num][num];
		int x = 0;
		int y = num/2;
		
		mabang[x][y] = 1;
		
		for(int pos=2; pos<=num*num; pos++) {
			if(x<0) {
				if(y<0) {
					x=x+2;
					y=y+1;
				}else{
				x=x+num;
				}
			}else{
				if(y<0) {
					y=y+num;
				}else {
					if(mabang[x][y]!=0){
						x=x+2;
						y=y+1;
				}
				
			}
		}
			
			mabang[x][y] = pos;
		}
		for(int[] first : mabang) {
			for(int value : first) {
				System.out.print("["+value+"]"+" ");
			}
			System.out.println();
		}
	}
}

 

  • for(int pos=2; pos<=num*num; pos++) 에서

먼저 왼쪽 대각선위로 먼저 이동시킴
    x= x-1;
    y= y-1;

  - 위치(x,y) 이동 후 위로 벗어나는 경우; x<0
  - 위치(x,y) 이동 후 왼쪽으로 벗어나는 경우; y<0
  - 위치(x,y) 이동 후 북서쪽으로 벗어나는 경우; x<0 and y<0
  - 위치(x,y) 이동 후 배열을 벗어나지는 않지만 이동한 위치가 이미 다른값이 있을 경우 : mabang[x][y] !=0

'til > Algorithm' 카테고리의 다른 글

[구현] 왕실의 나이트  (0) 2022.07.05
[완전 탐색] 시각 문제  (0) 2022.07.05
회장 선거  (0) 2021.07.31
[Two pointers] 연속된 자연수의 합  (0) 2021.07.30
연속부분수열  (0) 2021.07.30
Comments