param : 행, 렬, [회전구역]
행과 열로 테이블을 만든다.
(반복문) 회전 구역 길이 만큼
상 : 왼쪽에서 오른쪽으로 temp 배열에 추가
우 : 위에서 아래로 temp 배열에 추가
하 : 오른쪽에서 왼쪽으로 배열에 추가
좌 : 아래에서 위로 temp 배열에 추가
temp 마지막요소를 0번 index로 이동한다.
temp의 최소값을 answer에 추가한다.
위 반복문을 돌면서 temp 배열을 순서대로 추가한다.
function solution(rows, columns, queries) {
var answer = [];
// 2차원 배열 만들기
let arr = Array(rows)
for(let i = 0 ; i < rows ; i++){
arr[i] = Array(columns)
for(let j = 0 ; j < columns ; j++ ){
arr[i][j] = (i) * columns + j+1
}
}
// console.log(arr)
// query 개수 만큼 반복
// 영역 사이의 테두리 위치 구하기
for(let z = 0 ; z < queries.length ; z++){
let r1 = queries[z][0] -1
let c1 = queries[z][1] -1
let r2 = queries[z][2] -1
let c2 = queries[z][3] -1
let order = []
for(let i = c1 ; i <= c2 ; i++){// top , left에서 right로 이동
order.push(arr[r1][i])
}
for(let i = r1+1 ; i <= r2 ; i++){ // right , top에서 bottom으로 이동
order.push(arr[i][c2])
}
for(let i = c2-1 ; i >= c1 ; i--){ // bottom , right에서 left로 이동
order.push(arr[r2][i])
}
for(let i = r2-1 ; i > r1 ; i--){ // right , bottom에서 top로 이동
order.push(arr[i][c1])
}
order.unshift(order[order.length-1])
let min = Math.min(...order)
answer.push(min)
order.pop()
for(let i = c1 ; i <= c2 ; i++){// top , left에서 right로 이동
arr[r1][i] = order.shift()
}
for(let i = r1+1 ; i <= r2 ; i++){ // right , top에서 bottom으로 이동
arr[i][c2] = order.shift()
}
for(let i = c2-1 ; i >= c1 ; i--){ // bottom , right에서 left로 이동
arr[r2][i] = order.shift()
}
for(let i = r2-1 ; i > r1 ; i--){ // right , bottom에서 top로 이동
arr[i][c1] = order.shift()
}
// console.log(order)
order = []
}
return answer;
}