코딩테스트/HackerRank

[HackerRank] Flipping the Matrix 📌

주니어주니 2023. 4. 12. 19:54

 

문제 

주어진 행렬의 행과 열을 뒤집을 수 있을 때, 1사분면의 합이 최대인 값

 

 

 

다른 사람 풀이 

 

private static int flippingMatrix(List<List<Integer>> matrix) {

    // 행렬의 크기를 절반으로 나누면 -> 1사분면의 크기
    int quadSize = matrix.size()/2;
    int sum = 0;

    for(int r=0; r < quadSize; r++) {
        for(int c=0; c < quadSize; c++) {

            // 2*quadSize = 행렬의 전체 크기 
            int p1 = matrix.get(r).get(c);
            int p2 = matrix.get((2*quadSize)-r-1).get(c);
            int p3 = matrix.get(r).get((2*quadSize)-c-1);
            int p4 = matrix.get((2*quadSize)-r-1).get((2*quadSize)-c-1);

            sum += Math.max(p1, Math.max(p2, Math.max(p3, p4)));
        }
    }

    return sum;
}

 

 

4행 4열의 matrix에서 1사분면에 올 수 있는 값

 

(0, 0) -> (0, 0), (3, 0), (0, 3), (3, 3) 중 가장 큰 값

(0, 1) -> (0, 1), (3, 1), (0, 2), (2, 2) 

(1, 0) -> (1, 0), (2, 0), (1, 3), (2, 3) ... 

 

(i, j), (n - i - 1, j), (i, n - j - 1), (n - i - 1, n - j - 1) 중 가장 큰 값들의 합