알고리즘 공부/CodeUp 문제풀이

코드업 1510:홀수 마방진(C)

티들 2023. 10. 18. 23:38

문제 설명

마방진(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

 

나의 코드

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);    // 입력
    int arr[50][50] = {0};  // 배열 초기화
    int num = 1;
    int x = 0, y = n / 2;   // 초기 설정
    int nextx, nexty;
    while (num <= n * n)
    {
        arr[x][y] = num++;  // arr값 추가후 num증가

        // 다음 x, y좌표 구함
        nextx = (x - 1 + n) % n;
        nexty = (y + 1) % n;

        // 다음 좌표가 범위 안이라면
        if (arr[nextx][nexty] == 0)
        {
            x = nextx;
            y = nexty;
        }
        else    // 아니라면 범위 안으로
            x = (x + 1) % n;
    }

    // 출력
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            printf("%d ", arr[i][j]);
        printf("\n");
    }

    return 0;
}

 

문제 바로가기:https://codeup.kr/problem.php?id=1510&rid=0