보관함

JUNGOL 실력키우기 도형만들기2 - 홀수 마방진

niamdank 2020. 1. 24. 10:49

기초 다지기에서 배운 내용을 응용하여 문제를 해결해야 하는 실력 키우기입니다.

실력 키우기는 비슷한 문제 유형별로 묶어서 풀어보겠습니다.

 

이번 포스팅에서는 도형만들기2의 홀수 마방진을 풀어보겠습니다.


2074 : 홀수 마방진

 

이전의 문제를 보다 이 문제를 보니 굉장히 친절한 것 같습니다. x 혹은 y가 0보다 작아지면 n - 1로 이동하도록 하는 것만 주의하면 어려울 게 없는 문제입니다.

 

#include <iostream>

using namespace std;

int arr[101][101];

int main(void)
{
    int n;
    cin >> n;

    int x{ n / 2 }, y{ 0 };

    for (int i = 0, num = 1; i < n * n; ++i, ++num)
    {
        arr[y][x] = num;
        if (arr[y][x] % n == 0)
        {
            y++;
        }
        else
        {
            x--;
            y--;
        }

        if (x < 0)
        {
            x = n - 1;
        }
        if (y < 0)
        {
            y = n - 1;
        }
    }

    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            cout << arr[i][j] << ' ';
        }
        cout << endl;
    }
}

 

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1338&sca=2020

 

JUNGOL | 홀수 마방진 > 문제은행

/* 채워야 할 위치(x, y)와 값(num)을 전달받아 *//* 배열에서 해당 위치에 값을 넣고 다음의 위치와 값을 호출하는 재귀함수 */void fill(int x, int y, int num){    if(num > n * n) return; // 수가 범위를 벗어나면 종료    if(x < 1) x = n; // x가 0이면 n으로    if(y < 1) y = n; // y가 0이면 n으로    arr[x][y] = num; // 배열 채우기  

www.jungol.co.kr