1572. Matrix Diagonal Sum

Leekimoon·2022년 5월 31일
0

문제설명

정사각 행렬 매트가 주어지면 행렬 대각선의 합을 반환합니다.
기본 대각선의 모든 요소와 기본 대각선의 일부가 아닌 보조 대각선의 모든 요소의 합만 포함합니다.
대각선이 교차한 값은 한번만 더합니다.

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;
};
profile
FrontEnd Developer

0개의 댓글