🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/77485
✏️ 풀이
function solution(rows, columns, queries) {
const matrix = [...Array(rows)]
.map((_, row) => [...Array(columns)].map((_, col) => row * columns + col + 1));
const result = [];
const rotate = (query) => {
const [x1, y1, x2, y2] = query.map(v => v - 1);
const first = matrix[x1][y1];
let min = first;
for (let i = x1; i < x2; i++) {
const value = matrix[i + 1][y1];
matrix[i][y1] = value;
min = Math.min(min, value);
}
for (let i = y1; i < y2; i++) {
const value = matrix[x2][i + 1];
matrix[x2][i] = value;
min = Math.min(min, value);
}
for (let i = x2; i > x1; i--) {
const value = matrix[i - 1][y2];
matrix[i][y2] = value;
min = Math.min(min, value);
}
for (let i = y2; i > y1; i--) {
const value = matrix[x1][i - 1];
matrix[x1][i] = value;
min = Math.min(min, value);
}
// (x1, y1)의 값으로 (x1, y1 + 1)의 값을 업데이트해야 하는데,
// 이미 첫 반복문에서 (x1, y1)이 (x1, y1 + 1)의 값으로 바뀌어 있음
// 그래서 (x1, y1 + 1)을 원래 (x1, y1)의 값인 first로 바꾸어 줌
matrix[x1][y1 + 1] = first;
result.push(min);
};
queries.forEach(rotate);
return result;
}
'연습장 > 프로그래머스 문제풀이' 카테고리의 다른 글
[프로그래머스 Level 2] 후보키 - JavaScript (0) | 2022.09.22 |
---|---|
[프로그래머스 Level 2] 두 큐 합 같게 만들기 - JavaScript (0) | 2022.09.17 |
[프로그래머스 Level 2] 수식 최대화 - JavaScript (0) | 2022.09.16 |
[프로그래머스 Level 2] 괄호 변환 - JavaScript (0) | 2022.09.15 |
[프로그래머스 Level 2] 메뉴 리뉴얼 - JavaScript (0) | 2022.09.15 |