특이할만한 알고리즘은 없음. 그냥 array 를 회전시키면서 최소값을 구하면 됨.
다른 사람 풀이도 다르진 않은데 나보다 더 깔끔하게 코딩함.
모든 프로그래머스 문제 관련 코드들은 GitHub 링크 에 있음.
// array 를 회전시키고 최소값을 구하는 함수
const getMinWithrotate = (query, arr) => {
const y1 = query[0] - 1;
const x1 = query[1] - 1;
const y2 = query[2] - 1;
const x2 = query[3] - 1;
let min = arr[y1][x1];
let curX = x1;
let curY = y1;
let pre = min;
do {
if (curX < x2 && curY === y1) {
curX++;
} else if (curX === x2 && curY < y2) {
curY++;
} else if (curX > x1 && curY === y2) {
curX--;
} else if (curX === x1 && curY > y1) {
curY--;
}
let temp = arr[curY][curX];
arr[curY][curX] = pre;
pre = temp;
min = min > pre ? pre : min;
} while (curY !== y1 || curX !== x1);
return min;
};
function solution(rows, columns, queries) {
var answer = [];
let arr = [];
let num = 1;
for (let i = 0; i < rows; i++) {
arr[i] = [];
for (let j = 0; j < columns; j++) {
arr[i].push(num);
num++;
}
}
const result = [];
queries.map(query => {
result.push(getMinWithrotate(query, arr));
});
return result;
}