wintertreey 님의 블로그

행렬, 전치행렬 본문

프로그래밍언어/C++

행렬, 전치행렬

wintertreey 2025. 1. 30. 23:34

행렬

//#include <stdio.h>
#include <iostream>

int main() {
	int matrix[4][4] = {
		{1,2,3,4},
		{5,6,7,8},
		{9,10,11,12},
		{13,14,15,16}
	};

	std::cout << "기본 행렬 출력" << std::endl;
	// 원래 행렬출력
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {	
			std::cout << matrix[i][j] << "\t;
		}
		std::cout << std::endl;
	}
    }

 

#include 헤더파일

#include <stdio.h> #include <iostream>
c 스타일 cpp 객체 지향 스타일
printf, scanf 등 사용시 std::cout, std::cin 사용시 

 

작성 코드는 c++기준이므로 <iostream>을 사용하여 입출력을 할 예정.

 

 

출력시 주의

std::cout << "기본 행렬 출력" << std::endl;
	// 원래 행렬출력
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {
			//std::cout << matrix[i][j] << std::endl;
			//줄바꿈이 계속 발생해서 한 줄에 하나씩 출력
			std::cout << matrix[i][j] << "\t"; 
		}
		std::cout << std::endl; //행이 끝나면 줄바꿈. 4*4 행렬 가독성 증가.
	}

 

주석 처리되었던 코드가 처음 작성했던 코드.

다음과같이 작성하면 std::endl에 의해 값 하나마다 줄바꿈이 발생. 

4*4 즉 행렬의 모양새로 출력을 하고자 한다면 줄바꿈은 바깥 for문에 넣어주는 작업을 해야한다.

 

 

 

전치행렬

 

전치행렬은 대각선 기준 위아래 값이 이동한 형태 

 

즉 대각선을 기준으로 해당 값은 이동/변경하지않고, 값이 서로 값이 치환되어야하는것이다.

2값이 5의 자리로, 5의 값이 2의 자리로.

 

이를 조건으로 표현해보면 다음과 같다.

1. i != j

같을때(대각선위치)는 치환할 필요가없다. 불필요한 작업이기에 효율성의 측면에서.

2. j > i

대각선을 기준으로 위아래(좌우) 한번만 교환을 수행해야한다.

i > j 일경우 중복교환으로 원상복귀가 되기에 다음과 같은 조건을 사용한다.

 

#include <iostream>

int main() {
	int matrix[4][4] = {
		{1,2,3,4},
		{5,6,7,8},
		{9,10,11,12},
		{13,14,15,16}
	};

	// 전치 행렬 변환
	int temp = 0;
	for (int i = 0; i < 4; i++) {
		for (int j = i + 1; j < 4; j++) {
			temp = matrix[i][j];
			matrix[i][j] = matrix[j][i];
			matrix[j][i] = temp;
		}

	}
	std::cout << "전치 행렬 출력" << std::endl;
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {
			std::cout << matrix[i][j] << "\t";
		}
		std::cout << std::endl;
	}
	return 0;
}

 

 

만약 전치 행렬 부분이 이해가 안된다면 예시와 설명을 통해 이해해보자

int temp = matrix[0][1];   // temp = 2
// 두번째 줄에서 덮어씌워지기에 원래 데이터를 상실함. 따라서 임시 변수temp를 이용해 원래 값 저장.
matrix[0][1] = matrix[1][0]; // matrix[0][1] ← 4 (swap 시작)
matrix[1][0] = temp;       // matrix[1][0] ← 2 (swap 완료)

 

 

swap 함수

// 전치 행렬 변환
	int temp = 0;
	for (int i = 0; i < 4; i++) {
		for (int j = i + 1; j < 4; j++) {
			//temp = matrix[i][j];
			//matrix[i][j] = matrix[j][i];
			//matrix[j][i] = temp;
			std::swap(matrix[i][j], matrix[j][i]); 
		}

	}

 

치환작업은 함수를 이용하면 더 간결하게 표현할 수 있다.

 

 

 

'프로그래밍언어 > C++' 카테고리의 다른 글

단일 연결 리스트 Singly Linked List  (0) 2025.01.31