직전에 풀었던 문제를 상기하고자 뭔가 다른 방식으로 매트릭스에 접근하는 문제를 발견했어요.
뭔가 매우 간단한 로직인데, 이를 구현하는 게 좀 헷갈렸어요.
그렇지만 이를 다시 분리하면서 접근하니, 이렇게 쉬운 문제가 없었답니다!
그렇다면, 어떻게 해결했는지, 살펴볼까요? 😉
자, 결국 우리는 어떤 일정한 패턴을 토대로, 전체 배열의 값을 회전시킬 수 있어야 해요.
따라서, 패턴을 구하는 것이 우선이겠죠?
그래서 저는 다음과 같이 노트에 적어보았답니다. 각 2차원 배열의 값은 행 인덱스, 열 인덱스
입니다!
혹시 뭔가 보이시나요?
얼핏 봐서는 복잡해 보이지만, 일정한 패턴을 담고 있죠!
여기서 저는 다음과 같은 패턴을 발견했답니다.
다음 i,j 번째의 값
=(전체 길이 - 1 - j), (i)
따라서 이를 이전에 익혔던 것을 활용해서, 다음 행과 열 값을 분리시켜서 적용해보았어요.
즉, 90도를 회전시키는 로직은 다음과 같습니다!
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function(matrix) {
const copiedMatrix = JSON.parse(JSON.stringify(matrix));
const matrixLength = matrix.length;
for (let i = 0; i < matrixLength; i += 1) {
for (let j = 0; j < matrixLength; j += 1) {
const row = matrixLength - 1 - j;
const col = i;
matrix[i][j] = copiedMatrix[row][col];
};
};
};
사실 i
와 j
값을 아예 행, 열과 별도로 분리하여 적용하는 문제를 찾고자 했는데, 그런 문제는 아니어서 아쉬웠어요. (좀 더 어려웠길 바랐는데...!)
그래도 뭔가 언젠가는 쓸 법한 패턴이라, 꼭 몸에 익혀야겠어요.
누군가에게는 도움이 되기를 바라며. 그럼, 이상!