Diagonal Difference

Problem

Diberikan matriks persegi n × n, hitung selisih mutlak antara jumlah elemen pada diagonal utama (kiri-atas ke kanan-bawah) dan diagonal sekunder (kanan-atas ke kiri-bawah).

Input

  • Baris 1: integer n (ukuran matriks)

  • n baris berikutnya: masing-masing n integer

Output

  • Integer: |sum_primary - sum_secondary|

Contoh

Input:
3
11 2 4
4 5 6
10 8 -12

Output:
15

Intuisi

  • Diagonal utama: elemen (i, i)

  • Diagonal sekunder: elemen (i, n-1-i)

  • Hitung kedua jumlah dalam satu loop, lalu ambil nilai mutlak selisihnya.


Contoh Langkah-demi-Langkah

n = 3
arr = [[11, 2, 4],
       [4,  5, 6],
       [10, 8, -12]]

Primary:  11 + 5 + (-12) = 4
Secondary: 4 + 5 + 10 = 19
|4 - 19| = 15

Algoritma

primary = 0, secondary = 0
untuk i dari 0 sampai n-1:
    primary += arr[i][i]
    secondary += arr[i][n-1-i]
kembalikan |primary - secondary|
  • Waktu: O(n)

  • Ruang: O(1)


Implementasi

public static int diagonalDifference(List<List<Integer>> arr) {
    int n = arr.size();
    int primary = 0, secondary = 0;
    for (int i = 0; i < n; i++) {
        primary += arr.get(i).get(i);
        secondary += arr.get(i).get(n - 1 - i);
    }
    return Math.abs(primary - secondary);
}
func diagonalDifference(arr [][]int) int {
    n := len(arr)
    primary, secondary := 0, 0
    for i := 0; i < n; i++ {
        primary += arr[i][i]
        secondary += arr[i][n-1-i]
    }
    diff := primary - secondary
    if diff < 0 {
        return -diff
    }
    return diff
}

Ringkasan

Bahasa
Akses Elemen
Hitung Mutlak
Kompleksitas

Java

arr.get(i).get(j)

Math.abs()

O(n)

Go

arr[i][j]

if diff < 0

O(n)

Satu loop, dua akumulator, selisih mutlak → solusi optimal.

Last updated