Notice
Recent Posts
Recent Comments
Link
250x250
콩부방
1510 : 홀수 마방진 본문
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