관리 메뉴

콩부방

1510 : 홀수 마방진 본문

알고리즘 공부/CodeUp

1510 : 홀수 마방진

콩이아부지이 2021. 9. 19. 13:48
728x90

마방진(magic square)이란 가로, 세로, 대각선의 합이 같은 사각형을 말한다.

홀수 n을 입력으로 받아 n*n 홀수 마방진을 만들어 보자.

만드는 방법은 여러가지 방법이 있지만, 아래와 같은 방법을 이용하여 구현해보자.

구현 방법:

1. 시작은 첫 행, 한 가운데 열에 1을 둔다.

2. 행을 감소, 열을 증가하면서 순차적으로 수를 넣어간다.

3. 행은 감소하므로 첫 행보다 작아지는 경우에는 마지막 행으로 넘어간다.

4. 열은 증가하므로 마지막 열보다 커지는 경우에는 첫 열로 넘어간다.

5. 넣은 수가 n의 배수이면 행만 증가한다. 열은 변화없음.

입력

마방진의 크기인 n이 입력된다.(n은 50보다 작은 홀수인 자연수)

출력

위의 방법대로 크기가 n인 홀수 마방진을 출력한다.

입력 예시   예시 복사

3

출력 예시

8 1 6

3 5 7

4 9 2

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int[][] b = new int[a][a];
		int i=0,j=a/2,v = 1; //넣을값
//		b[0][a/2]=c++; //시작값 첫행 한가운데 두기
//		for (int i = a-1; i >=0 ; i--) { // 2 1 0 
//			for (int j = 0; j < a; j++) { // 0 1 2 
//				b[i][j] = c++;
//			}
//			System.out.println();
//		}
		while(true) {
			if(i < 0 )i= a-1; // 행이 첫행보다 작아지는 경우 마지막으로 넘어간다.
			if(j == a)j = 0; //열이 마지막열보다 커지는 경우 첫 열로 넘어간다.
			if(b[i][j] == 0) { 
				b[i][j] = v;
			}
			if(v % a == 0) {//넣은 수가 배수이면 행만 증가
				i++;
			}else {
				i--;//2 1 1 2 
				j++;//2 0 0 0
			}
				v++;
			if(v == a*a+1) break;//종료조건
		}
		
		for (int k = 0; k < a; k++) {
			for (int k2 = 0; k2 < a; k2++) {
				System.out.print(b[k][k2] +" ");
			}
			System.out.println();
		}
	}
}

 

 

출처 :  https://codeup.kr/problem.php?id=1510 

 

홀수 마방진

마방진(magic square)이란 가로, 세로, 대각선의 합이 같은 사각형을 말한다. 홀수 n을 입력으로 받아 n*n 홀수 마방진을 만들어 보자. 만드는 방법은 여러가지 방법이 있지만, 아래와 같은 방법을 이

codeup.kr

 

728x90

'알고리즘 공부 > CodeUp' 카테고리의 다른 글

1512 : 숫자 등고선  (0) 2021.09.20
1511 : 테두리의 합  (0) 2021.09.19
1509 : 진격 후 결과  (0) 2021.09.19
1508 : 나도 IQ 150  (0) 2021.09.18
1506 : 2차원 배열 채우기 4(역달팽이 배열)  (0) 2021.09.18
Comments