본문 바로가기
2022-2/자료구조

마방진 그리기(홀수형)

by 철없는민물장어 2022. 9. 18.
728x90
#include <stdio.h>
#define MAX_SIZE 15
int main() {
	/*
	홀수x홀수칸 magicSquare 채우기
	*/
	int square[MAX_SIZE][MAX_SIZE];
	int row, col;
	int size;
	int count;

	size = 5; //임의로 size=5 지정
	for (int i = 0; i < size; i++) {
		for (int j = 0; j < size; j++) {
			square[i][j] = 0; //스퀘어 초기화
		}
	}


	square[0][size / 2] = 1; //맨 윗줄 중앙부터 시작
	int i = 0; //현재 행
	int j = size / 2; //현재 열



	for (count = 2; count <= size * size; count++) {
		row = (i - 1 < 0) ? (size - 1) : (i - 1);//row는 왼쪽 대각선 위로 이동, 넘어간경우 그 줄 맨아래로 이동
		col = (j - 1 < 0) ? (size - 1) : (j - 1);
		if (square[row][col] != 0) {
			i = (++i) % size;//밑칸으로이동
		}
		else {
			i = row;
			j = col;

		}
		square[i][j] = count;
	}

	printf("출력해볼게\n");
	for (i = 0; i < size; i++) {
		for (j = 0; j < size; j++) {
			printf("%5d ", square[i][j]);
		}
		printf("\n");
	}
		
}

맨 윗줄 중앙부터 시작한다.

왼쪽 위 대각선 방향으로 숫자를 1씩 증가시키며 적고,

왼쪽 위 대각선방향에 숫자가 이미 있는 경우에는 현재 칸 아래에다가 다음 숫자를 적는다

 

이렇게 다 채워보면 되는데, 이건 칸 수가 홀수일때만 가능하다고 함

시간복잡도는 O(size*size)

728x90

댓글