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

Java로 행렬의 대각선 합 계산하기 – 주대각선과 부대각선 완벽 정리

이 글에서는 행렬(Matrix)의 대각선 요소들의 합을 계산하는 방법을 Java 코드와 함께 자세히 살펴보겠습니다. 행렬은 요소들이 행(row)과 열(column) 형태로 배치된 2차원 배열 구조입니다.

주대각선과 부대각선이란?

주대각선(Principal Diagonal)은 정방행렬(정사각형 행렬)에서 왼쪽 위 모서리에서 오른쪽 아래 모서리로 이어지는 대각선을 의미합니다.

부대각선(Secondary Diagonal)은 그 반대로, 왼쪽 아래 모서리에서 오른쪽 위 모서리로 이어지는 대각선입니다.

예시 입출력

입력 행렬:

4 5 6 7
1 7 3 4
11 12 13 14
23 24 25 50

기대 출력 결과:

주대각선 요소의 합: 74
부대각선 요소의 합: 45

알고리즘

대각선의 합을 구하는 절차는 다음과 같습니다.

  1. 시작 – 프로그램을 실행합니다.
  2. 정수형 2차원 배열 input_matrix를 선언합니다.
  3. 행렬에 값을 정의(초기화)합니다.
  4. 이중 for문으로 행렬의 모든 요소를 순회하면서, i == j 조건일 때 주대각선 요소를 더하고, i + j == matrix_size - 1 조건일 때 부대각선 요소를 더합니다.
  5. 계산된 결과를 화면에 출력합니다.
  6. 종료 – 프로그램을 마칩니다.

예제 1: main 함수 안에서 모든 로직 처리

첫 번째 예제는 모든 연산을 main 함수 하나에 담아 처리하는 방식입니다.

public class MatrixDiagonals {
    static public void main(String[] args) {
        int[][] input_matrix = {
            { 4, 5, 6, 7 },
            { 1, 7, 3, 4 },
            { 11, 12, 13, 14 },
            { 23, 24, 25, 50 }
        };
        int matrix_size = 4;
        System.out.println("정의된 행렬:");
        for (int i = 0; i < matrix_size; i++) {
            for (int j = 0; j < matrix_size; j++)
                System.out.print(input_matrix[i][j] + " ");
            System.out.print("\n");
        }
        int principal_diagonal = 0, secondary_diagonal = 0;
        for (int i = 0; i < matrix_size; i++) {
            for (int j = 0; j < matrix_size; j++) {
                if (i == j)
                    principal_diagonal += input_matrix[i][j];
                if ((i + j) == (matrix_size - 1))
                    secondary_diagonal += input_matrix[i][j];
            }
        }
        System.out.println("\n행렬의 주대각선 요소의 합: " + principal_diagonal);
        System.out.println("\n행렬의 부대각선 요소의 합: " + secondary_diagonal);
    }
}

실행 결과

정의된 행렬:
4 5 6 7
1 7 3 4
11 12 13 14
23 24 25 50

행렬의 주대각선 요소의 합: 74

행렬의 부대각선 요소의 합: 45

예제 2: 객체 지향 방식으로 함수 분리

두 번째 예제는 대각선 합을 구하는 연산을 별도의 메서드로 캡슐화하여 객체 지향 프로그래밍(OOP) 스타일로 작성한 코드입니다. 이렇게 하면 코드의 재사용성과 가독성이 크게 향상됩니다.

public class MatrixDiagonals {
    static void diagonals_sum(int[][] input_matrix, int matrix_size) {
        int principal_diagonal = 0, secondary_diagonal = 0;
        for (int i = 0; i < matrix_size; i++) {
            for (int j = 0; j < matrix_size; j++) {
                if (i == j)
                    principal_diagonal += input_matrix[i][j];
                if ((i + j) == (matrix_size - 1))
                    secondary_diagonal += input_matrix[i][j];
            }
        }
        System.out.println("\n행렬의 주대각선 요소의 합: " + principal_diagonal);
        System.out.println("\n행렬의 부대각선 요소의 합: " + secondary_diagonal);
    }
    static public void main(String[] args) {
        int[][] input_matrix = {
            { 4, 5, 6, 7 },
            { 1, 7, 3, 4 },
            { 11, 12, 13, 14 },
            { 23, 24, 25, 50 }
        };
        int matrix_size = 4;
        System.out.println("정의된 행렬:");
        for (int i = 0; i < matrix_size; i++) {
            for (int j = 0; j < matrix_size; j++)
                System.out.print(input_matrix[i][j] + " ");
            System.out.print("\n");
        }
        diagonals_sum(input_matrix, matrix_size);
    }
}

실행 결과

정의된 행렬:
4 5 6 7
1 7 3 4
11 12 13 14
23 24 25 50

행렬의 주대각선 요소의 합: 74

행렬의 부대각선 요소의 합: 45

핵심 포인트 정리

  • 주대각선의 합은 인덱스 조건 i == j를 만족하는 요소들을 더하면 됩니다.
  • 부대각선의 합은 i + j == matrix_size - 1 조건을 이용해 구할 수 있습니다.
  • 두 대각선이 겹치는 중앙 요소(홀수 크기 행렬의 경우)가 있다면 필요에 따라 중복 계산 여부를 고려해야 합니다.
  • 연산 로직을 별도 메서드로 분리하면 유지보수성과 재사용성이 좋아집니다.