주어진 정사각형 행렬의 대각선들의 합의 절대 차이를 계산합니다.
예를 들어, 아래와 같은 정사각형 행렬이 주어졌을 때:
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 |