알고리즘 - 행렬 테두리 회전

HoJeong Im·2021년 9월 20일
0

Break_Algo

목록 보기
9/46

문제

코드

function solution(rows, columns, queries) {
    var answer = [];
    let val = 0;
    let arr = Array.from(new Array(rows), (e)=>{
        return Array.from(new Array(columns), (e1)=>{
            return ++val;    
        });
    });
    
    const test = (query) => {
        let x1 = query[0];
        let y1 = query[1];
        let x2 = query[2];
        let y2 = query[3];
        let point = [];
        let lastPointX = x1+1;
        let lastPointY = y1;
        
        // c 이동 
        for(let y = y1 ; y<=y2 ; y++){
            point.push([x1,y]);
        }
        // r 이동 
        for(let x = x1+1 ; x<=x2 ; x++){
            point.push([x,y2]);
        }
        for(let y = y2-1 ; y >= y1 ; y--){
            point.push([x2,y]);            
        }
        for(let x = x2-1 ; x >= x1+1 ; x--){
            point.push([x,y1]);
        }
        let val = [];
        point.forEach((p)=>{
            val.push(arr[p[0]-1][p[1]-1]); 
        });
        val.unshift(val.pop());
        let min = Math.min(...val);
        answer.push(min);
        point.forEach((p,index)=>{
            arr[p[0]-1][p[1]-1] = val[index]; 
        });
        
    }
    
    queries.forEach((query)=>{
        test(query);
    });
    
    return answer;
}

회고

  • 행렬 테두리를 회전할 때 점들의 위치와 값을 따로 배열에 저장 후, 큐를 이용해 배열에 다시 회전한 결과를 저장
profile
꾸준함이 제일 빠른 길이었다

0개의 댓글