문제설명
정사각 행렬 매트가 주어지면 행렬 대각선의 합을 반환합니다.
기본 대각선의 모든 요소와 기본 대각선의 일부가 아닌 보조 대각선의 모든 요소의 합만 포함합니다.
대각선이 교차한 값은 한번만 더합니다.
Example 1:
Input: mat = [[1,2,3], [4,5,6], [7,8,9]] Output: 25 Explanation: Diagonals sum: 1 + 5 + 9 + 3 + 7 = 25 Notice that element mat[1][1] = 5 is counted only once.
Example 2:
Input: mat = [[1,1,1,1], [1,1,1,1], [1,1,1,1], [1,1,1,1]] Output: 8
Example 3:
Input: mat = [[5]] Output: 5
정답 코드
const diagonalSum = function(mat) { if(mat.length === 1) return mat[0][0] // 배열이 1인경우 바로 return let x = 0; // 행을 조절할 변수 let y = 0; // 열을 조절할 변수 let result =0; // 최초 메인 대각선 값을 더할 반복문 while(x < mat.length) { //인자로 들어온 mat길이만큼만 반복문 result += mat[x][y]; // 메인 대각선인 왼쪽 위 [0,0] 부터 값을 더한다. x++; y++; } // 보조 대각선 값을 더하기 위해서 변수 초기와 y=0; x--; // 행의 마지막 인덱스를 넘어서 1만큼 마이너스 while(x >= 0) { result += mat[x][y]; // 오른쪽 아래서 부터 대각선 값을 합 한다. x--; y++; } //배열의 길이가 홀수 일때만 중복되어서 더해진 중간 값을 빼준다. if (mat.length > 1 && mat.length % 2 === 1) { let tmp = Math.floor(mat.length / 2); result -= mat[tmp][tmp]; } return result; };