[프로그래머스 level2] 행렬 테두리 회전하기

김예지·2021년 11월 1일
0

문제

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코드도 잘 사용하자!

profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

0개의 댓글