코딩테스트/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) 중 가장 큰 값들의 합