티스토리 뷰

728x90

문제 링크

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

 

풀이

1) 배열을 1부터 순서대로 채워줍니다.

2) 시계 방향으로 회전을 시켜야 하니까, 반시계 방향으로 순회하며 값을 복사해줍니다.

3) 정답 리턴

 

 

정답 코드

function solution(rows, columns, queries) {
    const board = Array(rows).fill().map((row, i) => Array(columns).fill().map((column, j) => i*columns + j + 1));

    const rotate = function(query){
        let [x1, y1, x2, y2] = query;
        x1--, y1--, x2--, y2--;

        const ft = board[x1][y1];
        const arr = [ft];
        for(let i = x1; i < x2; i++){
            arr.push(board[i][y1] = board[i+1][y1]);
        }
        for(let j = y1; j < y2; j++){
            arr.push(board[x2][j] = board[x2][j+1]);
        }
        for(let i = x2; i > x1; i--){
            arr.push(board[i][y2] = board[i-1][y2]);
        }
        for(let j = y2; j > y1; j--){
            arr.push(board[x1][j] = board[x1][j-1]);
        }
        board[x1][y1+1] = ft;

        return Math.min(...arr);
    }

    return queries.reduce((ans, query) => {
        ans.push(rotate(query));
        return ans;
    }, []);
}
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함