알고리즘/문제 풀이
[프로그래머스] 행렬 테두리 회전하기 (2021 Dev-Matching)
degurii
2021. 5. 2. 22:05
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