wintertreey 님의 블로그
행렬, 전치행렬 본문
행렬
//#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 |
---|