코딩 테스트

[HackerRank] Diagonal Difference

juble 2024. 9. 24. 12:10

Problem


Given a square matrix, calculate the absolute difference between the sums of its diagonals.

For example, the square matrix  is shown below:

1 2 3
4 5 6
9 8 9  

The left-to-right diagonal = . The right to left diagonal = . Their absolute difference is .

Function description

Complete the  function in the editor below.

diagonalDifference takes the following parameter:

  • int arr[n][m]: an array of integers

Return

  • int: the absolute diagonal difference

Input Format

The first line contains a single integer, , the number of rows and columns in the square matrix .
Each of the next  lines describes a row, , and consists of  space-separated integers .

Constraints

  •  

Output Format

Return the absolute difference between the sums of the matrix's two diagonals as a single integer.

Sample Input

3
11 2 4
4 5 6
10 8 -12

Sample Output

15

Explanation

The primary diagonal is:

11
   5
     -12

Sum across the primary diagonal: 11 + 5 - 12 = 4

The secondary diagonal is:

     4
   5
10

Sum across the secondary diagonal: 4 + 5 + 10 = 19
Difference: |4 - 19| = 15

Note: |x| is the absolute value of x


이 문제는 주어진 정사각형 행렬의 대각선 요소들의 합을 구하고, 그 차이를 구하는 문제입니다.

문제 설명

주어진 정사각형 행렬에서 두 대각선의 합의 절대 차이를 계산하세요.

예를 들어, 다음과 같은 정사각형 행렬이 주어졌다고 합시다:

1 2 3
4 5 6
9 8 9

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

함수 설명

diagonalDifference 함수를 완성하세요. 이 함수는 다음 매개변수를 입력받습니다:

  • int arr[n][m]: 정수로 이루어진 배열(행렬)

반환값

  • 두 대각선 합의 절대 차이값을 반환합니다.

입력 형식

첫 번째 줄에는 정사각형 행렬의 크기 n이 주어집니다.
그 다음의 n줄에는 각 행의 정수들이 공백으로 구분되어 주어집니다.

제약 조건

  • 행렬의 크기 n은 1 ≤ n ≤ 100이며, 행렬은 항상 정사각형입니다.

출력 형식

행렬의 두 대각선 합의 절대 차이를 정수로 반환하세요.

예시 입력

3
11 2 4
4 5 6
10 8 -12
 

예시 출력

15

설명

주어진 행렬에서:

  • 첫 번째 대각선(왼쪽 위에서 오른쪽 아래로)은 11, 5, -12이며, 합은 11 + 5 - 12 = 4입니다.
  • 두 번째 대각선(오른쪽 위에서 왼쪽 아래로)은 4, 5, 10이며, 합은 4 + 5 + 10 = 19입니다.
  • 두 대각선의 차이는 |4 - 19| = 15입니다.

참고: |x|는 x의 절대값을 나타냅니다.

 

 

Solution


내가 푼 방식은 이렇다. 

public static int diagonalDifference(List<List<Integer>> arr) {
    // Write your code here
        int x=0, y=0, result;
        for (int i = 0; i < arr.size(); i++) {
            x += arr.get(i).get(i);
            y += arr.get(i).get(arr.size()-1-i);
        }
        result = x-y;
        if (result > 0) {
            return result;
        } else {
            return -result;
        }
    }

위  코드는 주어진 2차원 리스트(List<List<Integer>>)에서 두 대각선의 합을 계산하고, 그 차이의 절대값을 반환한다. 

코드 설명:

  1. 변수 x, y: 각각 왼쪽에서 오른쪽으로 가는 대각선(primary diagonal)과 오른쪽에서 왼쪽으로 가는 대각선(secondary diagonal)의 합을 저장
  2. 반복문: 리스트의 크기만큼 반복하면서, 대각선의 요소들을 더한다.
    • arr.get(i).get(i)는 primary diagonal의 요소를 가져온다.
    • arr.get(i).get(arr.size() - 1 - i)는 secondary diagonal의 요소를 가져온다.
  3. 절대값 계산: x에서 y를 뺀 결과가 양수일 때는 그대로 반환하고, 음수일 때는 양수로 바꾸어 반환하는 방식

개선할 수 있는 점:

  • Math.abs() 함수를 사용하면 절대값을 더 간결하게 구할 수 있다.
public static int diagonalDifference(List<List<Integer>> arr) {
    int x = 0, y = 0;
    
    for (int i = 0; i < arr.size(); i++) {
        x += arr.get(i).get(i);
        y += arr.get(i).get(arr.size() - 1 - i);
    }

    return Math.abs(x - y);  // 절대값 반환
}

 

❕ Math.abs()

  • Java에서 주어진 숫자의 절댓값( absolute )을 반환하는 메서드
  • 절댓값은 숫자의 크기를 나타내며, 부호는 무시하고 항상 0 이상인 값을 의미
  • 이 메서드는 정수, 부동 소수점 수, 또는 이 두 타입의 포장 클래스인 Integer, Double 등과 함께 사용할 수 있다.

기본 사용법은 다음과 같다. 

int positiveNumber = 5;
int negativeNumber = -5;

int absValue1 = Math.abs(positiveNumber);  // 결과: 5
int absValue2 = Math.abs(negativeNumber);  // 결과: 5

 

728x90
반응형

'코딩 테스트' 카테고리의 다른 글

[HackerRank] Flipping the Matrix  (13) 2024.09.24
[HackerRank] Counting Sort 1  (4) 2024.09.24
[HackerRank] Lonely Integer  (2) 2024.09.23
[HackerRank] Find the Median  (5) 2024.09.23
[HackerRank] Plus Minus  (0) 2024.09.23