알고리즘

[hackerRank] DiagonalDifference

91cm 2019. 12. 10. 00:34


문제

https://www.hackerrank.com/challenges/diagonal-difference/problem



문제요약 


ex)

 a b c

 d e f

 g f  i


절대값 ( (a+e+i) - (c+e+g) ) 을 출력!



접근방법


1. 좌측 대각선 (0,0) , (1,1), (2,2)

2. 우측 대각선 (0,2), (1,1),  (2,0)

3. 즉 좌측대각선은 (x,y) y값 증가한다

4.  우측대각선은 (x,y) y값 감소한다

5. for문  0번째 인덱스부터 x값과 y값을 각각 증가 ,감소를 하여 변수에 담아서 계산함



package com.cm;

import java.util.ArrayList;
import java.util.List;

/**
* https://www.hackerrank.com/challenges/diagonal-difference/problem
*/
public class DiagonalDifference {
public DiagonalDifference() {
List<List<Integer>> arr = new ArrayList<>();

List<Integer> list1 = new ArrayList<>();
list1.add(11);
list1.add(2);
list1.add(4);

List<Integer> list2 = new ArrayList<>();
list2.add(4);
list2.add(5);
list2.add(6);

List<Integer> list3 = new ArrayList<>();
list3.add(10);
list3.add(8);
list3.add(-12);

arr.add(list1);
arr.add(list2);
arr.add(list3);

System.out.println(solution(arr));
}

public int solution(List<List<Integer>> arr){
int leftNum = 0 ;
int rightNum = 0;

int leftCount = 0;
int rightCount = arr.size();

for(int i =0; i<arr.size(); i++){
leftNum += arr.get(i).get(leftCount);
rightNum += arr.get(i).get(rightCount-1);
leftCount ++;
rightCount --;
}

return Math.abs(leftNum - rightNum);
}
}




leftNum += arr.get(i).get(leftCount);


leftNum 변수를 사용하지않고, for문의 i변수를 이용 할 수도 있음.