2차원 배열 K번 회전 시키기 rotateMatrix, Javascript

cptkuk91·2022년 9월 7일
1

Algorithm

목록 보기
89/161
post-custom-banner

문제

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를 반환합니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)
post-custom-banner

0개의 댓글