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
'2022-2 > 자료구조' 카테고리의 다른 글
2장 - 희소 행렬(Sparse Matrix)의 표현 (1) | 2022.09.25 |
---|---|
2장 - 다항식의 덧셈 구현하기 (1) | 2022.09.25 |
배열과 구조체, 공용체, 순서리스트 (2) | 2022.09.21 |
시간복잡도 (big - O,big - Omega,big - Theta) 표기법 (0) | 2022.09.17 |
선택정렬, 이진탐색, 순열 (0) | 2022.09.14 |
댓글