문제 설명
마방진(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;
}
'알고리즘 공부 > CodeUp 문제풀이' 카테고리의 다른 글
코드업 2039:시정표 작성하기(C) (2) | 2023.10.20 |
---|---|
코드업 1981:파일 입력 처리하기(C) (2) | 2023.10.19 |
코드업 1640:악성 프로그램 삭제하기(C) (0) | 2023.10.16 |
코드업 1602:절대값 함수(C) (0) | 2023.10.14 |
코드업 1291:바이러스 백신(C) (2) | 2023.10.13 |