37.8 연습문제: 행렬의 주대각선 성분 구하기

다음 소스 코드를 완성하여 정사각행렬의 주대각선 성분이 출력되게 만드세요. 주대각선 성분은 왼쪽 위부터 오른쪽 아래까지 이어지는 대각선에 위치한 값을 말합니다.

practice_principal_diagonal_of_matrix.c

#include <stdio.h>

int main()
{
    int matrix[8][8] = {
        {  1,  2,  3,  4,  5,  6,  7,  8 },
        {  9, 10, 11, 12, 13, 14, 15, 16 },
        { 17, 18, 19, 20, 21, 22, 23, 24 },
        { 25, 26, 27, 28, 29, 30, 31, 32 },
        { 33, 34, 35, 36, 37, 38, 39, 40 },
        { 41, 42, 43, 44, 45, 46, 47, 48 },
        { 49, 50, 51, 52, 53, 54, 55, 56 },
        { 57, 58, 59, 60, 61, 62, 63, 64 }
    };

    ____________________________________________________________
    ...
    ____________________________________________________________
    return 0;
}

실행 결과

1 10 19 28 37 46 55 64

정답

for (int m = 0; m < sizeof(matrix) / sizeof(matrix[0]); m++)
{
    printf("%d ", matrix[m][m]);
}

해설

먼저 행렬의 주대각선에 위치한 값들의 규칙을 살펴봅니다. 1 10 19 28 37 46 55 64의 행, 열 위치값은 서로 같으며 0부터 1씩 증가한다는 것을 알 수 있습니다.

따라서 반복문으로 행(m)을 출력하면서 배열의 세로 인덱스와 가로 인덱스에 m값을 넣어주면 됩니다(행렬의 세로 크기(행)는 배열이 차지하는 전체 공간을 가로 크기(열)로 나눠주면 됩니다).