[プログラマレベル2]マトリクスの枠線を回転

15837 ワード

質問する


https://programmers.co.kr/learn/courses/30/lessons/77485

問題を解く


コード#コード#

function solution(rows, columns, queries) {
    let answer=[];
    let arr=Array.from(Array(rows), ()=>Array(columns).fill(0));
    for(let i=1; i<=rows; i++){
        for(let j=1; j<=columns; j++){
            arr[i-1][j-1]=(i-1)*columns+j
        }
    }
    
    for(let i=0; i<queries.length; i++){
        rotation(queries[i][0], queries[i][1], queries[i][2], queries[i][3]);
    }

    function rotation(x1, y1, x2, y2){
        let min=Number.MAX_SAFE_INTEGER;
        let tmp=arr[x1-1][y2-1];
        //위
        for(let i=y2; i>y1; i--){
            arr[x1-1][i-1]=arr[x1-1][i-2];
            if(arr[x1-1][i-1]<min) min=arr[x1-1][i-1];
        }
        //왼
        for(let i=x1; i<x2; i++){
            arr[i-1][y1-1]=arr[i][y1-1];
            if(arr[i-1][y1-1]<min) min=arr[i-1][y1-1];
        }
        //아래
        for(let i=y1; i<y2; i++){
            arr[x2-1][i-1]=arr[x2-1][i];
            if(arr[x2-1][i-1]<min) min=arr[x2-1][i-1];
        }
        //오른쪽 
        for(let i=x2; i>x1; i--){
            arr[i-1][y2-1]=arr[i-2][y2-1];
            if(arr[i-1][y2-1]<min) min=arr[i-1][y2-1];
        }
        arr[x1][y2-1]=tmp;
        if(arr[x1][y2-1]<min) min=arr[x1][y2-1];
        answer.push(min);
    }
    return answer;
}
途中でやめようと思っていた問題が、結局自分で解決!こういうときは毎回達成感があります.🤣
上、左、右、下の各回転を体現している.私の解題効率は低すぎると思いますが、ほとんどの人はこのように解題しています.
途中でバカなことをしましたが、vsコードの助けでやっと解けました.vsコードもしっかり使いましょう!