반응형
행렬 테두리 회전하기 ( Level 2 )
2021 Dev-Matching: 웹 백엔드 개발자(상반기) ( JavaScript )
나의 풀이
function solution(rows, columns, queries) {
const arr = Array(rows).fill(1)
.map((el, i) => Array(columns).fill(el + i * columns)
.map((a, i) => a + i)
)
const res = []
while ( queries.length ) {
const query = queries.shift();
let num = [];
for ( let i = query[1]; i < query[3]; i++ ) num.push(arr[query[0]-1][i-1])
for ( let i = query[0]; i < query[2]; i++ ) num.push(arr[i-1][query[3]-1])
for ( let i = query[3]; i > query[1]; i-- ) num.push(arr[query[2]-1][i-1])
for ( let i = query[2]; i > query[0]; i-- ) num.push(arr[i-1][query[1]-1])
num = [...num.slice(-1), ...num.slice(0, -1)]
res.push(Math.min(...num))
for ( let i = query[1]; i < query[3]; i++ ) arr[query[0]-1][i-1] = num.shift()
for ( let i = query[0]; i < query[2]; i++ ) arr[i-1][query[3]-1] = num.shift()
for ( let i = query[3]; i > query[1]; i-- ) arr[query[2]-1][i-1] = num.shift()
for ( let i = query[2]; i > query[0]; i-- ) arr[i-1][query[1]-1] = num.shift()
}
return res
}
- 1부터 차례대로 들어가는 이중배열을 만든다.
- 시계방향으로 회전하는 숫자를
num
에 모두 담은 뒤 마지막 요소를 맨 앞으로 보낸다. num
에서 가장 작은 값을res
에 푸시- 행렬에
num
을 순서대로 재배치한다. - 이 과정을 반복한 뒤
res
리턴