https://programmers.co.kr/learn/courses/30/lessons/77485?language=javascript
function solution(r, c, queries) {
var answer = [];
let min = r*c + 1;
let arr = [];
let newArr = [];
for (let i = 0; i < r; i++) {
arr[i] = [];
newArr[i] = [];
for (let j = 0; j < c; j++) {
arr[i][j] = i*c + j + 1;
newArr[i][j] = i*c + j + 1;
}
}
queries.forEach(query => {
let [x1, y1, x2, y2] = query;
x1--; y1--;x2--;y2--;
for (let i = 0; i < r; i++) {
for (let j = 0; j < c; j++) {
// 좌 -> 우
if(i === x1 && j >= y1 && j < y2) {
newArr[i][j+1] = arr[i][j]
if(arr[i][j] < min) min = arr[i][j];
// 상 -> 하
} else if(j === y2 && i >= x1 && i < x2){
newArr[i+1][j] = arr[i][j];
if(arr[i][j] < min) min = arr[i][j];
// 우 -> 좌
} else if(i === x2 && j >= y1+1 && j <= y2){
newArr[i][j-1] = arr[i][j];
if(arr[i][j] < min) min = arr[i][j];
// 하 -> 상
} else if(j === y1 && i >= x1+1 && i <= x2) {
newArr[i-1][j] = arr[i][j]
if(arr[i][j] < min) min = arr[i][j];
// 그 외
} else {
newArr[i][j] = arr[i][j];
}
}
}
newArr.forEach((v, i) => {
v.forEach((k, j) => {
arr[i][j] = k
})
})
answer.push(min);
min = r*c + 1;
})
return answer;
}
행렬 테두르의 범위를 지정한다.
나 같은 경우, 좌 -> 우
, 상 -> 하
, 우 -> 좌
, 하 -> 상
에 해당되는 범위를 if문으로 처리했다.
그래서 값이 덮어씌워지지 않게 새로운 배열에 값을 넣고, 나중에 값을 복사하는 식으로 구현했다,
function solution(rows, columns, queries) {
const a = [...Array(rows)].map((_, r)=>[...Array(columns)].map((_, c)=>r*columns+c+1));
const mins = [];
queries.map(query => {
const [x1, y1, x2, y2] = query.map(_=>_-1);
let min = a[x1][y1], tmp = a[x1][y1];
for(let i=x1;i<x2;i++) {
a[i][y1] = a[i+1][y1];
min = Math.min(min, a[i][y1]);
}
for(let i=y1;i<y2;i++) {
a[x2][i] = a[x2][i+1];
min = Math.min(min, a[x2][i]);
}
for(let i=x2;i>x1;i--) {
a[i][y2] = a[i-1][y2];
min = Math.min(min, a[i][y2]);
}
for(let i=y2;i>y1;i--) {
a[x1][i] = a[x1][i-1];
min = Math.min(min, a[x1][i]);
}
a[x1][y1+1] = tmp;
mins.push(min);
})
return mins;
}