본문 바로가기

Fundamentals/Algorithms

[해커랭크] Diagonal Difference

문제링크

 

Diagonal Difference | HackerRank

Calculate the absolute difference of sums across the two diagonals of a square matrix.

www.hackerrank.com

주어진 정사각형 행렬의 대각선들의 합의 절대 차이를 계산합니다.

예를 들어, 아래와 같은 정사각형 행렬이 주어졌을 때:

 

1 2 3
4 5 6
9 8 9

 

왼쪽에서 오른쪽으로 가는 대각선의 합은 1 + 5 + 9 = 15이고, 오른쪽에서 왼쪽으로 가는 대각선의 합은 3 + 5 + 9 = 17입니다. 이 두 합의 절대 차이는 |15 - 17| = 2입니다.

 

풀이 :

 

function diagonalDifference(arr: number[][]): number {
    // Write your code here
    let resultA = 0
    let resultB = 0
    for(let i=0; i < arr.length; i++){
        resultA += arr[i][i]
        resultB += arr[i][arr.length-1-i]
    }
    
    return Math.abs(resultA - resultB)

}

 

주어진 2차원 배열을 순회하면서, 각 대각선의 합을 계산한 후 그 차이의 절대값을 반환합니다. 

 

 

다른 풀이 :

 

function diagonalDifference(arr:number[][]):number {
     const primaryDiagonalSum = arr.reduce((sum, cur, index) => sum + cur[index], 0);
     const secondaryDiagonalSum = arr.reduce((sum, cur, index) => sum + cur[arr.length - 1 - index], 0);
     
     return Math.abs(primaryDiagonalSum - secondaryDiagonalSum);
}

 

reduce를 활용하여 2차원 배열의 주 대각선과 부 대각선 요소들의 합을 계산한 후, 그 차이의 절대값을 반환합니다.

 

 

함수형 프로그래밍으로 작성해보기

 

function calculateDiagonalSum(arr: number[][], isMainDiagonal: boolean): number {
    return arr.reduce((sum, cur, index) => {
        return isMainDiagonal ? sum + cur[index] : sum + cur[arr.length - 1 - index];
    }, 0);
}

function diagonalDifference(arr: number[][]): number {
    const primaryDiagonalSum = calculateDiagonalSum(arr, true);
    const secondaryDiagonalSum = calculateDiagonalSum(arr, false);

    return Math.abs(primaryDiagonalSum - secondaryDiagonalSum);
}

 

calculateDiagonalSum함수는 isMainDiagonal 플래그를 사용하여 주어진 2차원 배열의 주 대각선 또는 부 대각선의 합을 계산하고, diagonalDifference 함수는 이 두 합의 차이의 절대값을 반환하여 두 대각선의 요소 합이 얼마나 다른지를 나타냅니다.

'Fundamentals > Algorithms' 카테고리의 다른 글

[해커랭크] Staircase  (0) 2023.11.15
[해커랭크] Mini-Max Sum  (0) 2023.11.14
[해커랭크] A Very Big Sum  (0) 2023.11.10
[해커랭크] Compare the Triplets  (0) 2023.11.09
[해커랭크] Simple Array Sum  (0) 2023.11.09