개발 여정/코딩테스트 준비

HackerRank 1달 과정 1주차 7번- Diagonal Difference

calm-lee 2021. 12. 21. 19:13

https://www.hackerrank.com/challenges/one-month-preparation-kit-diagonal-difference/problem?isFullScreen=true&h_l=interview&playlist_slugs%5B%5D=preparation-kits&playlist_slugs%5B%5D=one-month-preparation-kit&playlist_slugs%5B%5D=one-month-week-one 

정사각 매트릭스 형태로 구성된 int들이 주어지면

이를 각 대각선 순서로 더한다. 

왼쪽 오른쪽 합을 따로 구한 뒤, 두 합의 차를 구해야 한다. (음수이면 양수로 전환)

 

class Result {


    public static int diagonalDifference(List<List<Integer>> arr) {
        
        int n = arr.size(); // 파라미터로 주어지는 List의 size
        int dia1 = 0; // 왼쪽 대각선 합
        int dia2 = 0; // 오른쪽 대각선 합
        int answer = 0; // 답
        
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                if(i == j){ // 왼쪽 대각선인 경우, i==j가 같아야 한다. 
                    dia1 += arr.get(i).get(j); // 이중 list이므로 get().get()으로 값을 불러온다.
                    } if (i + j == (n-1)){ // 오른쪽 대각선인 경우 i+j의 합이 arr.size()보다 1 작다. i==j인 경우도 포함하므로 else if를 쓰면 안된다.
                        dia2 += arr.get(i).get(j);
                        } 
                    }
                }
                
        answer = dia1 - dia2 > 0 ? dia1 - dia2 : -(dia1 - dia2); // 삼항연산자로 양수의 차이를 구한다.
        
        return answer;
    
    }

}

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int n = Integer.parseInt(bufferedReader.readLine().trim());

        List<List<Integer>> arr = new ArrayList<>();
        
        IntStream.range(0, n).forEach(i -> {
            try {
                arr.add(
                    Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
                        .map(Integer::parseInt)
                        .collect(toList())
                );
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        });
        

    
        int result = Result.diagonalDifference(arr);

        bufferedWriter.write(String.valueOf(result));
        bufferedWriter.newLine();

        bufferedReader.close();
        bufferedWriter.close();
    }
}

 

한 인도 유저가 반복문 하나로 간단하게 푼 풀이 (solution class는 같으므로 생략)

class Result {

    public static int diagonalDifference(List<List<Integer>> arr) {
       int diagonalSum=0; 
       int antiDiagonalSum=0;
       
     for(int i=0;i<arr.size();i++){
         
                 diagonalSum += arr.get(i).get(i);
                 antiDiagonalSum += arr.get(i).get(arr.size() - i - 1);
             }
             
    int diff = diagonalSum-antiDiagonalSum;
    return Math.abs(diff); // Math.abs() : 절대값을 반환하는 함수
  

    }

}