leetcode - Rotate Image (Javascript)

young_pallete·2022년 7월 23일
0

Algorithm

목록 보기
21/32

🌈 시작하며

직전에 풀었던 문제를 상기하고자 뭔가 다른 방식으로 매트릭스에 접근하는 문제를 발견했어요.
뭔가 매우 간단한 로직인데, 이를 구현하는 게 좀 헷갈렸어요.

그렇지만 이를 다시 분리하면서 접근하니, 이렇게 쉬운 문제가 없었답니다!
그렇다면, 어떻게 해결했는지, 살펴볼까요? 😉

🔍 본론

자, 결국 우리는 어떤 일정한 패턴을 토대로, 전체 배열의 값을 회전시킬 수 있어야 해요.
따라서, 패턴을 구하는 것이 우선이겠죠?

그래서 저는 다음과 같이 노트에 적어보았답니다. 각 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];
        };
    };
};

👏🏻 마치며

사실 ij값을 아예 행, 열과 별도로 분리하여 적용하는 문제를 찾고자 했는데, 그런 문제는 아니어서 아쉬웠어요. (좀 더 어려웠길 바랐는데...!)

그래도 뭔가 언젠가는 쓸 법한 패턴이라, 꼭 몸에 익혀야겠어요.

누군가에게는 도움이 되기를 바라며. 그럼, 이상!

profile
People are scared of falling to the bottom but born from there. What they've lost is nth. 😉

0개의 댓글