안녕지구 #developer #bompapa

기초 - 배열을 대각선으로(사선) 방향으로 채우기

|

배열대각선방향으로 채우기 위한 알고리즘입니다. 한 번에 채우려고 하면 복잡하고 헷갈리기 쉽습니다. 이번 포스트에서는 두 번에 걸쳐 채우는 방법을 사용했습니다. 대각선의 시작점을 반은 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