Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그램으로 주어진 행렬의 하삼각 행렬(Lower Triangular Matrix) 출력하기

n×n 크기의 행렬이 주어졌을 때, 이 행렬을 하삼각 행렬(Lower Triangular Matrix) 형태로 변환하여 출력하는 것이 이번 글의 목표입니다.

하삼각 행렬이란?

하삼각 행렬은 주대각선(principal diagonal)과 그 아래에 위치한 원소들은 그대로 유지하고, 주대각선 위쪽의 나머지 원소들은 모두 0으로 설정한 행렬을 의미합니다.

다음 그림을 통해 개념을 쉽게 이해할 수 있습니다.

C 프로그램으로 주어진 행렬의 하삼각 행렬(Lower Triangular Matrix) 출력하기

위 그림에서 초록색 원소는 주대각선 아래에 있어 그대로 유지되는 값들이고, 빨간색 원소는 주대각선 위에 있어 0으로 바뀌는 값들입니다.

예제

입력: matrix[3][3] = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 } }
출력:
    1 0 0
    4 5 0
    7 8 9

알고리즘

핵심 아이디어는 간단합니다. 행 인덱스 i와 열 인덱스 j를 비교하여, i < j인 경우(주대각선 위쪽)에는 0을 출력하고, 그렇지 않으면 원래 행렬의 값을 그대로 출력하면 됩니다.

int lower_mat(int mat[n][m])
START
STEP 1: 변수 i와 j 선언
STEP 2: FOR i = 0 ~ i < n 반복
    FOR j = 0 ~ j < m 반복
        IF i < j THEN,
            "0\t" 출력
        ELSE
            mat[i][j] 출력
        END IF
    END FOR
    줄바꿈 출력
END FOR
STOP

C 언어 구현 코드

#include <stdio.h>
#define n 3
#define m 3
int lower_mat(int mat[n][m]){
    int i, j;
    for ( i = 0; i < n; i++){
        for ( j = 0; j < m; j++){
            if( i < j )
                printf("0\t");
            else
                printf("%d\t", mat[i][j]);
        }
        printf("\n");
    }
}
int main(int argc, char const *argv[]){
    int mat[n][m] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    lower_mat(mat);
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

1 0 0
4 5 0
7 8 9

시간 복잡도

이 알고리즘은 행렬의 모든 원소를 한 번씩만 방문하면 되므로 시간 복잡도는 O(n²)이며, 추가적인 메모리 없이 기존 행렬을 그대로 활용하기 때문에 공간 복잡도는 O(1)입니다.