[C언어 소스] N*N 2차원 배열, 1~N*N값 설정, 우측 상단 합, 좌측 상단 합 출력

전역 변수로 N*N 2차원 배열을 선언하시오.

N은 매크로 상수로 정의하시오.

N*N 행렬로 출력하시오.

예:

3 x 3 행렬:
1 2 3
4 5 6
7 8 9

예:

다음처럼 대각선의 우측 상단 요소의 합계를 구하여 출력하시오.

1 2 3
  5 6
    9

출력 예

우측 상단 합계: 1 + 2 + 3 + 5 + 6 + 9 = 26

다음처럼 대각선의 좌측 상단 요소의 합계를 구하여 출력하시오.

1 2 3
4 5 
7  

출력 예

좌측 상단 합계:1 + 2 + 3 + 4 + 5 + 7 = 22

구현 코드

#include <stdio.h>

#define N 3

int arr[N][N];

int main()
{
    int sum = 0;

    printf("%dX%d 행렬:\n",N,N);
    for (int row = 0; row < N; row++)//행
    {
        for (int col = 0; col < N; col++)//열
        {
            arr[row][col] = row * N + col +1;//순차적으로 값 설정
            printf("%d ", arr[row][col]);//출력
        }
        printf("\n");//개행
    }

    sum = 0;
    printf("우측 상단 합계:");
    for (int row = 0; row < N; row++)//행
    {
        for (int col = row; col < N; col++)//열의 시작점을 row부터 1행에서는 1열부터, 2행은 2열부터, 3행은 3열부터,...
        {
            sum += arr[row][col];
            printf("%d", arr[row][col]);
            if (!(col == N - 1 && row == N - 1))//마지막 행이면서 마지막 열이 아닐 때
            {
                printf(" + ");//+ 연산자 출력
            }
            else//마지막 행이면서 마지막 열일 때
            {
                printf(" = ");// 등호 출력
            }
        }        
    }    
    printf("%d\n",sum);//합계 출력

    sum = 0;
    printf("좌측 상단 합계:");
    for (int row = 0; row < N; row++)//행
    {
        for (int col = 0; col < (N-row); col++)//열의 마지막을 N-row보다 작을 때까지 1행은 N-0, 2행은 N-1, 3행은 N-2, ...
        {
            sum += arr[row][col];
            printf("%d", arr[row][col]);
            if (row < N - 1)//마지막 행이 아닐 때
            {
                printf(" + ");//+ 연산자 출력
            }
            else//마지막 행일 때
            {
                printf(" = ");// 등호 출력
            }
        }
    }
    printf("%d\n", sum);//합계 출력
    return 0;
}