문제 설명
풀이 : Success
소스 코드
public static int diagonalDifference(List<List<Integer>> arr) {
// Write your code here
int leftDiagonal = 0;
int rightDiagonal = 0;
int loop = arr.size();
for (int i = 0; i < loop; i++) {
leftDiagonal += arr.get(i).get(i);
rightDiagonal += arr.get(i).get(loop-i-1);
}
return Math.abs(leftDiagonal - rightDiagonal);
}
풀이 회고
문제에서는 2차원 리스트 자료구조(전체 크기와 각 요소의 크기가 모두 동일한)가 주어졌을 때 이를 행렬로 인식하여 행렬의 왼쪽 최상단 요소와 오른쪽 최하단 요소를 이은 직선을 지나는 요소의 합(leftDiagonal)과 오른쪽 최상단 요소와 왼쪽 최하단 요소를 이은 직선을 지나는 요소의 합(rightDiagonal)의 차이값(절대값)을 요구하고 있다.
이를 계산하기 위해 행렬의 크기를 loop 변수에 별도로 저장하고 loop 값만큼 일차원 for문을 순회하여 각각의 diagonal 값을 구해주도록 했다. 이때 leftDiagonal의 값은 for문의 지역변수 i 그 자체만을 이용하여 값을 구했으나 rightDiagonal은 열의 요소가 그 반대(y축 대칭)에 위치하므로 마지막 인덱스(loop - 1)에서 시작 인덱스 순으로 접근하도록 하여 값을 구했다.
'Algorithm > HackerRank' 카테고리의 다른 글
[HackerRank] Save the Prisoner! - Java (0) | 2022.01.27 |
---|---|
[HackerRank] Number Line Jumps - Java (0) | 2022.01.26 |
[HackerRank] Time Conversion - Java (0) | 2022.01.26 |