cheolung.dev

[JavaScript] 행렬 테두리 회전하기

Programmers
2024년 4월 1일
/thumbnail/programmers.png

Code

function solution(rows, columns, queries) {
    let attr = 1;
    const arr = Array.from({length: rows}, () => Array.from({length: columns}, () => attr++));
    const mins = [];
 
    queries.forEach(query => {
        // 인덱스값으로 
        const [x1, y1, x2, y2] = query.map(el => el-1);
        let min = arr[x1][y2], tmp = arr[x1][y2];
 
        for(let i=y2; i>y1; i--){
            arr[x1][i] = arr[x1][i-1];
            min = Math.min(min, arr[x1][i]);
        }
        
        for(let i=x1; i<x2; i++){
            arr[i][y1] = arr[i+1][y1];
            min = Math.min(min, arr[i][y1]);
        }
        
        for(let i=y1; i<y2; i++){
            arr[x2][i] = arr[x2][i+1];
            min = Math.min(min, arr[x2][i]);
        }
        
        for(let i=x2; i>x1; i--){
            arr[i][y2] = arr[i-1][y2];
            min = Math.min(min, arr[i][y2]);
        }
 
        arr[x1+1][y2] = tmp;
        // console.log(arr);
        mins.push(min);
    });
 
    return mins;
}

해설

  • 행렬의 요소를 한 칸씩 이동하려면 순서가 중요하다. 각 행 마다 비어있는 부분을 하나씩 채워줘야 하기 때문!
  • 이동을 다 하게되면 같은 숫자가 두개 존재하게 되는데 해당 숫자를 임시 변수에 넣어서 마지막에 추가해준다. matrix