소프트웨어에 대한 모든 것

LeetCode 풀기 - 1572. Matrix Diagonal Sum 본문

알고리즘/LeetCode

LeetCode 풀기 - 1572. Matrix Diagonal Sum

앤테바 2021. 12. 6. 08:19
반응형

1572. Matrix Diagonal Sum

https://leetcode.com/problems/matrix-diagonal-sum/

 

Matrix Diagonal Sum - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제)

솔루션1) - Straight forward

왼쪽 상단에서 부터 오른쪽 하단으로 탐색하면서 더합니다.

오른쪽 상단에서 부터 왼쪽 하단으로 탐색하면서 더합니다.

만약 매트릭스가 row가 홀수 크기로 되어 있다면 중간에 원소를 두 번 더했으므로 한 번 빼주면됩니다.

class Solution:
    def diagonalSum(self, mat: List[List[int]]) -> int:
        rows = len(mat)
        cols = len(mat[0])
        
        res = 0
        
        # from 왼쪽 상단 to 오른쪽 하단
        col = 0
        for row in range(rows):
            if not (0 <= row < rows and 0 <= col < cols):
                break
            
            res += mat[row][col]
            col += 1
        
        # from 오른쪽 상단 to 왼쪽 하단
        col = cols - 1
        for row in range(rows):
            if not (0 <= row < rows and 0 <= col < cols):
                break
            
            res += mat[row][col]
            col -= 1
        
        # 매스트릭스가 홀수이면 두 번 계산된 중앙의 값을 한 번 빼 줌
        if rows % 2 == 1:
            res -= mat[rows//2][cols//2]
            
        return res

솔루션2)

솔루션1의 반복문을 두 번 수행했다면, 솔루션2는 반복문을 한 번만 수행합니다.

secondary diagnola을 오른쪽 상단에서 왼쪽 하단으로 내려오는 것이 아니라, 왼쪽 하단에서 오른쪽 상단으로 탐색해 나가는 방식입니다.

class Solution:
    def diagonalSum(self, mat: List[List[int]]) -> int:
        rows = len(mat)
        res = 0
        for i in range(rows):
            # primary diagnoal
            res += mat[i][i]
            
            # secondary diagnoal
            res += mat[rows - i - 1][i]
            
        if rows % 2 == 1:
            res -= mat[rows//2][rows//2]
            
        return res

 

반응형
Comments