[Programmers]Lv 2マトリクスボーダーJavaScriptの回転
13193 ワード
完全なソースコード
function solution(rows, columns, queries) {
let answer = [];
let myArray = Array.from(new Array(rows), () => new Array(columns).fill(1))
.map((row, r) => row.map((v, c) => (r * columns) + (c + 1)));
for (let query of queries) {
let row1 = query[0]-1;
let col1 = query[1]-1;
let row2 = query[2]-1;
let col2 = query[3]-1;
let tmpArr = new Array();
for (let idx = col1; idx < col2; idx++) { tmpArr.push(myArray[row1][idx]); }
for (let idx = row1; idx < row2; idx++) { tmpArr.push(myArray[idx][col2]); }
for (let idx = col2; idx > col1; idx--) { tmpArr.push(myArray[row2][idx]); }
for (let idx = row2; idx > row1; idx--) { tmpArr.push(myArray[idx][col1]); }
tmpArr.unshift(tmpArr.pop());
let cnt = 0;
for (let idx = col1; idx < col2; idx++) { myArray[row1][idx] = tmpArr[cnt++]; }
for (let idx = row1; idx < row2; idx++) { myArray[idx][col2] = tmpArr[cnt++]; }
for (let idx = col2; idx > col1; idx--) { myArray[row2][idx] = tmpArr[cnt++]; }
for (let idx = row2; idx > row1; idx--) { myArray[idx][col1] = tmpArr[cnt++]; }
answer.push(Math.min(...tmpArr));
}
return answer;
}
問題の説明
行x columnsサイズのマトリクス.行列の数字は1からrows x columnsの順に1行です.
この行列で長方形の範囲を複数回選択し、枠線部分の数値を時計回りに回転させます.各回転は4つの整数(x 1,y 1,x 2,y 2)で表される.
行列の行、列および回転リスト[(x 1、y 1、x 2、y 2)...]与えられたタイミングで、各回転をマトリクスに適用し、その回転によって位置を変更する数値. 最小の数字を配列に順番に入れて返す問題.
I/O例
rowscolumnsqueriesresult66[[2,2,5,4],[3,3,6,6],[5,1,6,3]][8, 10, 25]
これはあなたが覚えて勉強できるようにするためです.
コメントサイト:
プログラマ-回転マトリクス境界
Reference
この問題について([Programmers]Lv 2マトリクスボーダーJavaScriptの回転), 我々は、より多くの情報をここで見つけました https://velog.io/@minukbak/303テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol