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

자바(Java)로 행렬의 각 행에서 첫 번째 열과 마지막 열 요소 교환하기


이 글에서는 행렬(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)입니다.