안녕지구 #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