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