이 글에서는 행렬(matrix)에서 열을 기준으로 첫 번째 요소와 마지막 요소를 서로 교환하는 방법을 알아봅니다. 행렬은 요소들이 행(row)과 열(column)의 형태로 배열된 2차원 데이터 구조로, m개의 행과 n개의 열을 가진 행렬을 흔히 m × n 행렬이라고 부릅니다.
행렬을 구성하는 개별 항목을 '요소(element)'라고 하며, a[i][j] 형태로 표현할 수 있습니다. 이 표기는 i번째 행, j번째 열에 해당 요소가 위치한다는 의미입니다.
먼저 예시를 통해 어떤 작업을 수행하는지 살펴보겠습니다.
입력값
The matrix is defined as: 4 5 6 7 1 7 3 4 11 12 13 14 23 24 25 50
원하는 출력 결과
The matrix after swapping the elements: 7 5 6 4 4 7 3 1 14 12 13 11 50 24 25 23
결과를 보면 각 행에서 첫 번째 열의 값과 마지막 열의 값이 서로 맞바뀌었음을 확인할 수 있습니다. 예를 들어 첫 번째 행의 4와 7이 교환되어 '7 5 6 4'가 되었습니다.
알고리즘
1단계 - 시작 2단계 - 정수형 행렬 input_matrix와 정수형 변수 matrix_length를 선언한다. 3단계 - 행렬의 값을 정의한다. 4단계 - 여러 개의 for 루프를 사용해 행렬의 각 요소를 순회하고, 임시 변수(temp)를 활용하여 각 행의 첫 번째 요소와 마지막 요소를 교환한다. 5단계 - 결과를 출력한다. 6단계 - 종료
예제 1: main 함수에서 모든 작업 처리하기
첫 번째 예제에서는 모든 연산을 'main' 함수 하나에 묶어서 처리합니다.
public class MatrixSwap {
static void swap(int input_matrix[][]) {
}
public static void main(String args[]) {
int input_matrix[][] = {
{ 4, 5, 6, 7 },
{ 1, 7, 3, 4 },
{ 11, 12, 13, 14 },
{ 23, 24, 25, 50 }
};
System.out.println("The matrix is defined as: ");
for (int i = 0; i < input_matrix.length; i++) {
for (int j = 0; j < input_matrix[0].length; j++)
System.out.print(input_matrix[i][j] + " ");
System.out.println();
}
int matrix_length = input_matrix.length;
for (int i = 0; i < input_matrix[0].length; i++) {
int temp = input_matrix[i][0];
input_matrix[i][0] = input_matrix[i][matrix_length - 1];
input_matrix[i][matrix_length - 1] = temp;
}
System.out.println("\nThe matrix after swapping the elements: ");
for (int i = 0; i < matrix_length; i++) {
for (int j = 0; j < input_matrix[0].length; j++)
System.out.print(input_matrix[i][j] + " ");
System.out.println();
}
}
}
실행 결과
The matrix is defined as: 4 5 6 7 1 7 3 4 11 12 13 14 23 24 25 50 The matrix after swapping the elements: 7 5 6 4 4 7 3 1 14 12 13 11 50 24 25 23
예제 2: 객체 지향 방식으로 구현하기
두 번째 예제에서는 교환 로직을 별도의 메서드(swap)로 캡슐화하여 객체 지향 프로그래밍 스타일로 구현합니다. 이렇게 하면 코드의 재사용성과 가독성이 향상됩니다.
public class MatrixSwap {
static void swap(int input_matrix[][]) {
int matrix_length = input_matrix.length;
for (int i = 0; i < input_matrix[0].length; i++) {
int temp = input_matrix[i][0];
input_matrix[i][0] = input_matrix[i][matrix_length - 1];
input_matrix[i][matrix_length - 1] = temp;
}
System.out.println("\nThe matrix after swapping the elements: ");
for (int i = 0; i < matrix_length; i++) {
for (int j = 0; j < input_matrix[0].length; j++)
System.out.print(input_matrix[i][j] + " ");
System.out.println();
}
}
public static void main(String args[]) {
int input_matrix[][] = {
{ 4, 5, 6, 7 },
{ 1, 7, 3, 4 },
{ 11, 12, 13, 14 },
{ 23, 24, 25, 50 }
};
System.out.println("The matrix is defined as: ");
for (int i = 0; i < input_matrix.length; i++) {
for (int j = 0; j < input_matrix[0].length; j++)
System.out.print(input_matrix[i][j] + " ");
System.out.println();
}
swap(input_matrix);
}
}
실행 결과
The matrix is defined as: 4 5 6 7 1 7 3 4 11 12 13 14 23 24 25 50 The matrix after swapping the elements: 7 5 6 4 4 7 3 1 14 12 13 11 50 24 25 23
코드 핵심 정리
두 예제 모두 동일한 원리로 동작합니다. 먼저 행렬의 크기를 matrix_length에 저장한 뒤, for 루프로 각 행을 순회하면서 임시 변수 temp에 첫 번째 열의 값을 잠시 보관합니다. 이후 마지막 열의 값을 첫 번째 열에 대입하고, temp에 저장해 둔 값을 마지막 열에 대입하면 두 요소가 안전하게 교환됩니다. 이 과정의 시간 복잡도는 O(n)으로, n은 행렬의 행(또는 열) 개수이며 추가로 사용되는 공간은 임시 변수 하나뿐이므로 공간 복잡도는 O(1)입니다.