기초 - 배열을 대각선으로(사선) 방향으로 채우기
17 Jan 2021 | 알고리즘 배열배열을 대각선방향으로 채우기 위한 알고리즘입니다. 한 번에 채우려고 하면 복잡하고 헷갈리기 쉽습니다. 이번 포스트에서는 두 번에 걸쳐 채우는 방법을 사용했습니다. 대각선의 시작점을 반은 Row Index를 기준으로 나머지 반은 Column Index를 기준을 잡으면 시작점을 따라가면서 사선을 채울 수 있습니다.
대각선 방향으로 배열 채우기
#include <stdio.h>
int map[12][12];
void print_init() {
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 12; j++) {
map[i][j] = 0;
}
}
}
void print_map() {
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 12; j++) {
printf("%4d ", map[i][j]);
}
printf("\n");
}
printf("\n");
}
int main() {
int row, col, count;
// 대각선 오른쪽 위 방향 ↗
printf("# 대각선 오른쪽 위 방향 ↗ 으로 채우기 \n\n");
print_init();
row = col = count = 0;
printf("## 반을 채웁니다. \n");
for (int i = 1; i <= 10; i++) { // row 시작 index
int row = i;
for (int col = 1; col <= i; col++) { // col 이동
// 배열에 등록
map[row][col] = count;
count++;
// row 이동
row = row - 1;
}
}
print_map();
printf("## 나머지를 채웁니다. \n");
for (int i = 2; i <= 10; i++) { // col 시작 index
int col = i;
for (int row = 10; row >= i; row--) { // row 이동
// 배열에 등록
map[row][col] = count;
count++;
// col 이동
col = col + 1;
}
}
print_map();
printf("\n\n");
// 대각선 오른쪽 아래 방향 ↘
printf("# 대각선 오른쪽 아래 방향 ↘ 으로 채우기 \n\n");
print_init();
row = col = count = 0;
printf("## 반을 채웁니다. \n");
for (int i = 10; i >= 1; i--) { // row 시작 index
int row = i;
for (int col = 1; col <= 10 - i + 1; col++) { // col 이동
// 배열에 등록
map[row][col] = count;
count++;
// row 이동
row = row + 1;
}
}
print_map();
printf("## 나머지를 채웁니다. \n");
for (int i = 2; i <= 10; i++) { // col 시작 index
int col = i;
for (int row = 1; row <= 10 - i + 1; row++) { // row index
// 배열에 등록
map[row][col] = count;
count++;
// col 이동
col = col + 1;
}
}
print_map();
return 0;
}
출력
# 대각선 오른쪽 위 방향 ↗ 으로 채우기
## 반을 채웁니다.
0 0 0 0 0 0 0 0 0 0 0 0
0 0 2 5 9 14 20 27 35 44 54 0
0 1 4 8 13 19 26 34 43 53 0 0
0 3 7 12 18 25 33 42 52 0 0 0
0 6 11 17 24 32 41 51 0 0 0 0
0 10 16 23 31 40 50 0 0 0 0 0
0 15 22 30 39 49 0 0 0 0 0 0
0 21 29 38 48 0 0 0 0 0 0 0
0 28 37 47 0 0 0 0 0 0 0 0
0 36 46 0 0 0 0 0 0 0 0 0
0 45 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
## 나머지를 채웁니다.
0 0 0 0 0 0 0 0 0 0 0 0
0 0 2 5 9 14 20 27 35 44 54 0
0 1 4 8 13 19 26 34 43 53 63 0
0 3 7 12 18 25 33 42 52 62 71 0
0 6 11 17 24 32 41 51 61 70 78 0
0 10 16 23 31 40 50 60 69 77 84 0
0 15 22 30 39 49 59 68 76 83 89 0
0 21 29 38 48 58 67 75 82 88 93 0
0 28 37 47 57 66 74 81 87 92 96 0
0 36 46 56 65 73 80 86 91 95 98 0
0 45 55 64 72 79 85 90 94 97 99 0
0 0 0 0 0 0 0 0 0 0 0 0
# 대각선 오른쪽 아래 방향 ↘ 으로 채우기
## 반을 채웁니다.
0 0 0 0 0 0 0 0 0 0 0 0
0 45 0 0 0 0 0 0 0 0 0 0
0 36 46 0 0 0 0 0 0 0 0 0
0 28 37 47 0 0 0 0 0 0 0 0
0 21 29 38 48 0 0 0 0 0 0 0
0 15 22 30 39 49 0 0 0 0 0 0
0 10 16 23 31 40 50 0 0 0 0 0
0 6 11 17 24 32 41 51 0 0 0 0
0 3 7 12 18 25 33 42 52 0 0 0
0 1 4 8 13 19 26 34 43 53 0 0
0 0 2 5 9 14 20 27 35 44 54 0
0 0 0 0 0 0 0 0 0 0 0 0
## 나머지를 채웁니다.
0 0 0 0 0 0 0 0 0 0 0 0
0 45 55 64 72 79 85 90 94 97 99 0
0 36 46 56 65 73 80 86 91 95 98 0
0 28 37 47 57 66 74 81 87 92 96 0
0 21 29 38 48 58 67 75 82 88 93 0
0 15 22 30 39 49 59 68 76 83 89 0
0 10 16 23 31 40 50 60 69 77 84 0
0 6 11 17 24 32 41 51 61 70 78 0
0 3 7 12 18 25 33 42 52 62 71 0
0 1 4 8 13 19 26 34 43 53 63 0
0 0 2 5 9 14 20 27 35 44 54 0
0 0 0 0 0 0 0 0 0 0 0 0
Comments