그림 1. 처럼 2nx2n 행렬에서 2사분면에 위치하는 nxn 행렬의 값이 최댓값이 되도록 각각의 행, 열 뒤집기
ex) 한 행의 배열을 뒤집거나, 한 열의 배열을 뒤집어 구하고자하는 위치에 최대한 큰 값이 오도록 하는 것
그림 1. 행렬 뒤집기 게임의 구조
그림 1. 의 우측에서 0,0에 위치할 수 있는 최댓값은 그림 2. 에서 표시된 네 귀퉁이의 값 중 하나
즉, 원본링크에 풀이된 내용 처럼 최댓값은
(0,0) (0,2n) (2n,0) (2n,2n) 에 위치한 값 중 큰 값
그림 2. (0,0)에 위치할 최댓값 구하기
행과열을 각각 i, j 라고 할 때, 2사분면에 위치시킬 행렬의 최댓값은
(i, j) (i, n-j) (n-i, j) (n-i, n-j) 에 위치한 값 중 큰 값
// 생략
/*
* Complete the 'flippingMatrix' function below.
*
* The function is expected to return an INTEGER.
* The function accepts 2D_INTEGER_ARRAY matrix as parameter.
*/
function flippingMatrix(matrix) {
// Write your code here
const n = matrix.length;
let max = 0;
for (let j = 0; j < n/2; ++) {
for (let i = 0; i < n/2; i++) {
max += Math.max(matrix[i][j], matrix[i][n-1-j], matrix[n-1-i][j], matrix[n-1-i][n-1-j]);
}
}
return max;
}
// ..후략