어제의 나보다 성장한 오늘의 나

[프로그래머스][2021 Dev-Matching: 웹 백엔드 개발자][자바스크립트] 행렬 테두리 회전하기 본문

알고리즘/프로그래머스(Programmers)

[프로그래머스][2021 Dev-Matching: 웹 백엔드 개발자][자바스크립트] 행렬 테두리 회전하기

NineOne 2021. 4. 29. 00:19

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

 

코딩테스트 연습 - 행렬 테두리 회전하기

6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]

programmers.co.kr

function solution(rows, columns, queries) {
    var answer = [];   
  
    const map = Array.from(Array(rows), () => new Array(columns));
    
    let number = 1;
    for(let i=0; i<rows; i++){
        for(let j=0; j<columns; j++){
            map[i][j] = number++;
        }
    }
    
    for(let i=0; i<queries.length; i++){
        const leftX =queries[i][0] -1;
        const leftY =queries[i][1] -1;
        const rightX = queries[i][2] -1;
        const rightY = queries[i][3] -1;
        
        let min = [map[leftX][leftY]];
        let temp = map[leftX][leftY];
        
        // 반대로
        // 왼쪽
        for(let i = leftX; i<rightX; i++){
            map[i][leftY] = map[i+1][leftY];
            min.push(map[i][leftY]);
        }
        
        // 아래
        for(let i = leftY; i<rightY; i++){
            map[rightX][i] = map[rightX][i+1];
            min.push(map[rightX][i]);
        }
        
        // 오른쪽
        for(let i = rightX; i>leftX; i--){
            map[i][rightY] = map[i-1][rightY];
            min.push(map[i][rightY]);
        }
        
        // 위
        for(let i = rightY; i>leftY; i--){
            map[leftX][i] = map[leftX][i-1];
            min.push(map[leftX][i]);
        }
        
        map[leftX][leftY+1] = temp;
        
        answer.push(Math.min.apply(null, min));
    }
    
    return answer;
}

정리

문제의 설명대로 배열을 잘 돌리면 문제 없다!

Comments