2차원 N x N 배열을 시계 방향으로 90도 회전시킨 배열을 리턴해야 합니다.
const matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16],
];
console.log(matrix[0][0]); // --> 1
console.log(matrix[3][2]); // --> 15
const rotatedMatrix = rotateMatrix(matrix);
console.log(rotatedMatrix[0][0]); // --> 13
console.log(rotatedMatrix[3][2]); // --> 8
const rotateMatrix = function (matrix, rotateNum = 1) {
let N = matrix.length;
let M = matrix[0] && matrix[0].length;
rotateNum = rotateNum % 4;
if(rotateNum === 0){
return matrix;
}
let result = [];
let rotateCount = rotateNum % 2 === 1 ? [M, N] : [N, M];
for(let row = 0; row < rotateCount[0]; row++){
result[row] = [];
for(let col = 0; col < rotateCount[1]; col++){
if(rotateNum === 1){
result[row][col] = matrix[N - col -1][row];
} else if(rotateNum === 2){
result[row][col] = matrix[N - row - 1][M - col - 1];
} else result[row][col] = matrix[col][M - row - 1];
}
}
return result;
};
회전 결과 행렬은 N M 을 3 2로 예를들면 1회 회전 시 row = [N - col - 1] 입니다.
2회 회전 시 row = [N - row - 1] 됩니다.
이후의 회전은 rotateNum % 4를 통해서 반복됩니다.
규칙이 있기 때문에, 규칙을 찾는 것이 중요합니다. row, col 변화값을 알기 위해서 직접 그림을 그려보는 방법이 있습니다.
M = matrix[0] && matrix[0].length 의 경우 논리 연산자 코드입니다.
matrix[0] 참인 경우, matrix[0].length를 반환합니다.