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>>)에서 두 대각선의 합을 계산하고, 그 차이의 절대값을 반환한다.
코드 설명:
- 변수 x, y: 각각 왼쪽에서 오른쪽으로 가는 대각선(primary diagonal)과 오른쪽에서 왼쪽으로 가는 대각선(secondary diagonal)의 합을 저장
- 반복문: 리스트의 크기만큼 반복하면서, 대각선의 요소들을 더한다.
- arr.get(i).get(i)는 primary diagonal의 요소를 가져온다.
- arr.get(i).get(arr.size() - 1 - i)는 secondary diagonal의 요소를 가져온다.
- 절대값 계산: 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
'코딩 테스트' 카테고리의 다른 글
[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 |