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

JavaScript로 2차원 행렬의 대각선 합 차이 계산하기

JavaScript에서 다음과 같이 2차원 배열로 표현된 정사각형 행렬(square matrix)이 있다고 가정해 보겠습니다.

const arr = [
    [1, 3, 5],
    [3, 5, 7],
    [2, 4, 2]
];

이러한 배열을 인자로 받아 처리하는 JavaScript 함수를 작성해야 합니다.

함수는 행렬의 주대각선(왼쪽 위 → 오른쪽 아래) 요소들의 합과 반대대각선(오른쪽 위 → 왼쪽 아래) 요소들의 합 사이의 차이를 반환해야 합니다.

계산 방식

예를 들어 위 행렬의 경우 계산 과정은 다음과 같습니다.

|주대각선 합 - 반대대각선 합|
|(1 + 5 + 2) - (5 + 5 + 2)|
|8 - 12|
= 4

예제 코드

다음은 이를 구현한 코드입니다.

const arr = [
    [1, 3, 5],
    [3, 5, 7],
    [2, 4, 2]
];

const diagonalDiff = arr => {
    let sum = 0;
    for (let i = 0, l = arr.length; i < l; i++) {
        sum += arr[i][l - i - 1] - arr[i][i];
    }
    return Math.abs(sum);
};

console.log(diagonalDiff(arr));

코드 설명

  • arr[i][i]: i번째 행의 주대각선 요소에 접근합니다.
  • arr[i][l - i - 1]: i번째 행의 반대대각선 요소에 접근합니다. 여기서 l은 행렬의 크기입니다.
  • 반복문 안에서 각 행마다 반대대각선 요소에서 주대각선 요소를 뺀 값을 누적합니다.
  • 마지막으로 Math.abs()를 사용하여 누적된 값의 절댓값을 반환함으로써, 어떤 대각선의 합이 더 크더라도 항상 양수인 차이를 얻을 수 있습니다.

이 알고리즘은 행렬을 한 번만 순회하므로 시간 복잡도는 O(n)입니다. 여기서 n은 행렬의 한 변의 길이입니다.

출력 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

4