n * n의 정수배열 matrix
그림으로 그렸을 때 시계방향 90도로 돌린 결과로 matrix 값을 변경
in-place 알고리즘으로 추가적인 공간 없이
matrix 자체를 수정해야함 (반환값 없음)
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function(matrix) {
let cnt = matrix.length;
for (let i = 0; i < matrix[0].length; i++) {
let arr = [];
for (let j = cnt - 1; j >= 0; j--)
arr.push(matrix[j][i]);
matrix.push(arr);
}
matrix.splice(0, cnt);
};
배열을 2중 for문으로 순회
가장 마지막 행부터 시작하여 같은 열의 값을
하나의 배열로 만들어서 원래의 matrix에 추가
모두 추가한 이후에 원래 배열만큼을 잘라냄
Accepted
Runtime 43ms (Beats 93.52%)
Memory 48.74MB (Beats 79.69%)
아마 내가 구현한 알고리즘은 in-place가 아닐 것이다. matrix와 같은 2차원 배열까지는 아니지만 새로운 배열을 사용해서 matrix의 크기를 늘리는 과정이 있었으니 조금 부적합하지 않나 생각이 든다. 하지만 도저히 생각이 안났다... 약간 matrix 같은 문제들에는 조금 약한 것 같다. 그래서 일단은 통과하고 솔루션을 조금 찾아보니까 오른쪽 아래를 향한 대각선을 기준으로 값들을 swap (matirx[i][j] = matrix[j][i]) 하고 좌우반전 swap을 하면 완성되는 방법을 알게되었다.