정방행렬(square matrix) M[r][c]에서 'r'은 행(row)의 개수, 'c'는 열(column)의 개수를 의미하며, 두 값이 같은 경우(r = c) 이 행렬 M이 항등 행렬인지 아닌지를 판별해야 합니다.
항등 행렬이란?
항등 행렬(Identity Matrix)은 크기가 n×n인 정방행렬로, 단위 행렬(Unit Matrix)이라고도 불립니다. 주대각선(main diagonal)에 위치한 원소는 모두 1이고, 그 외의 비대각선 원소는 모두 0으로 채워진 행렬입니다.
행렬 연산에서 항등 행렬은 곱셈의 항등원 역할을 하므로, 임의의 행렬 A에 대해 AI = IA = A라는 성질을 가집니다.
예를 들어 다음과 같습니다.
I1 = [1]
I2 = [ 1 0 ]
[ 0 1 ]
I3 = [ 1 0 0 ]
[ 0 1 0 ]
[ 0 0 1 ]
일반화하면 n차 항등 행렬 In은 주대각선만 1이고 나머지는 모두 0인 n×n 행렬입니다.
예제 입출력
입력: m[3][3] = { {1, 0, 0},
{0, 1, 0},
{0, 0, 1} }
출력: yes
입력: m[3][3] = { {3, 0, 1},
{6, 2, 0},
{7, 5, 3} }
출력: no알고리즘
시작
Step 1 -> 항등 행렬을 찾기 위한 함수 선언
int identity(int num)
int row, col 선언
row = 0부터 row < num까지 반복
col = 0부터 col < num까지 반복
IF (row == col)
1 출력
ELSE
0 출력
내부 반복문 종료
외부 반복문 종료
Step 2 -> main() 함수에서
int size = 4 선언
identity(size) 호출
종료
C 언어 구현 코드
#include<stdio.h>
int identity(int num){
int row, col;
for (row = 0; row < num; row++){
for (col = 0; col < num; col++){
if (row == col)
printf("%d ", 1);
else
printf("%d ", 0);
}
printf("\n");
}
return 0;
}
int main(){
int size = 4;
identity(size);
return 0;
}
실행 결과
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
참고: 시간 복잡도
위 코드는 n×n 크기의 행렬을 순회하면서 각 위치를 한 번씩 검사하거나 출력하므로, 시간 복잡도는 O(n²)입니다. 공간 복잡도는 별도의 추가 배열 없이 수행되므로 O(1)입니다.