Description
주어진 2N2N 크기의 배열에서 각 요소의 위치를 바꿔 nn의 크기의 요소의 합이 가장 큰 값을 반환하는 문제입니다.
Solution 1. Matrix
public static int flippingMatrix(List<List<Integer>> matrix) {
// Write your code here
int m = matrix.size();
int n = matrix.get(0).size();
int sum = 0;
//Divide size by 2 to get quadrant size
int quadSize = matrix.size()/2;
//Now for each cell in the upper quadrant, get the max value that could be flipped into that cell
//Iterate all rows in quadrant
for(int r = 0; r < quadSize; r++)
{
//Iterate all columns in quadrant
for(int c = 0; c < quadSize; c++)
{
//Grab the 4 possible values that could wind up in this location of the upper quadrant
int p1 = matrix.get(r).get((2*quadSize) - c - 1);
int p2 = matrix.get(r).get(c);
int p3 = matrix.get((2*quadSize) - r - 1).get(c);
int p4 = matrix.get((2*quadSize) - r - 1).get((2*quadSize) - c - 1);
//Get the highest value possible in this cell
sum += Math.max(p1, Math.max(p2, Math.max(p3, p4)));
}
}
return sum;
}
- 매트릭스 가장 좌측상단의 1열1행에 있는 값은 아무리 회전한들 결국 존재할 수 있는 위치는 n열n행, 1열 n행, n열 1행, 1열1행 4곳밖에 존재 할 수 없다
- 반대로 그 4곳에 위치하는 값중 가장 큰 값이 1열1행에 존재하게 됩니다.
- 모든 나머지 매트릭스의 위치값들도 matrix[i][j], matrix[i][n-j-1], matrix[n-i-1][j], matrix[n-i-1][n-j-1] 이 4개의 값 중 가장 큰 값이 좌측상단에 오게되고 그 값의 합을 구하면 된다
Reference
'알고리즘 > HackerRank' 카테고리의 다른 글
[HackerLank] Tower Breakers - 문제풀이 (0) | 2022.03.15 |
---|---|
[HackerLank] Zig Zag Sequence - 문제풀이 (0) | 2022.03.15 |
[HackerLank] Counting Sort 1 - 문제풀이 (0) | 2022.03.15 |
[HackerLangk] Diagonal Difference - 문제풀이 (0) | 2022.03.15 |
[HackerLank] Lonely Integer - 문제풀이 (0) | 2022.03.15 |