1572. Matrix Diagonal Sum

Leekimoon·2022년 5월 31일

문제설명

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

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개의 댓글