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

C 언어로 구현하는 행렬 뺄셈 프로그램


행렬 뺄셈이란?

두 개의 행렬 MAT1[row][column]과 MAT2[row][column]가 주어졌을 때, 두 행렬의 차를 구하여 그 결과를 출력하는 것이 이 프로그램의 목표입니다. 행렬 뺄셈은 MAT1[n][m] − MAT2[n][m] 형태로 나타낼 수 있습니다.

C 언어로 구현하는 행렬 뺄셈 프로그램

행렬 뺄셈이 성립하려면 두 행렬의 행(row)과 열(column)의 개수가 반드시 같아야 합니다. 크기가 다른 행렬 사이에서는 뺄셈 연산을 수행할 수 없습니다.

예시

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

접근 방법

두 행렬의 모든 행과 열을 하나씩 순회하면서 mat2[][]의 값을 mat1[][]에서 빼고, 그 결과를 result[][]에 저장합니다. 이때 모든 행렬에서 행과 열의 위치는 동일하게 유지됩니다.

알고리즘

함수 void subtract(int MAT1[][N], int MAT2[][N], int RESULT[][N])
    Step 1 → 정수형 변수 i, j를 선언한다.
    Step 2 → i = 0부터 i < N까지 반복한다.
        j = 0부터 j < N까지 반복한다.
        RESULT[i][j]에 MAT1[i][j] - MAT2[i][j]를 대입한다.
함수 int main()
    Step 1 → 행렬 MAT1[N][N]과 MAT2[N][N]을 선언한다.
    Step 2 → subtract(MAT1, MAT2, RESULT) 함수를 호출한다.
    Step 3 → 결과를 출력한다.

C 언어 구현 예제

#include <stdio.h>
#define N 3
// MAT2[][]를 MAT1[][]에서 빼고, 결과를 RESULT[][]에 저장하는 함수
void subtract(int MAT1[][N], int MAT2[][N], int RESULT[][N]) {
    int i, j;
    for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
    RESULT[i][j] = MAT1[i][j] - MAT2[i][j];
}
int main() {
    int MAT1[N][N] = { {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
    };
    int MAT2[N][N] = { {9, 8, 7},
    {6, 5, 4},
    {3, 2, 1}
  };
    int RESULT[N][N]; // 결과를 저장할 행렬
    int i, j;
    subtract(MAT1, MAT2, RESULT);
    printf("Resultant matrix is \n");
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++)
        printf("%d ", RESULT[i][j]);
        printf("\n");
    }
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Resultant matrix is
-8 -6 -4
-2  0  2
 4  6  8

시간 복잡도

이 알고리즘은 N×N 행렬의 모든 원소를 한 번씩 방문하므로 시간 복잡도는 O(N²)입니다. 또한 결과를 저장하기 위해 N×N 크기의 추가 행렬이 필요하므로 공간 복잡도 역시 O(N²)입니다.