문제
숫자 n을 받는 JavaScript 함수를 작성해야 합니다. 우리의 함수는 N * N 차수의 배열(2차원 배열)을 생성하고 반환해야 합니다. 여기서 1은 [0, 0]에서 시작하는 모든 나선형 위치를 취하고 모든 0은 나선형이 아닌 위치를 취합니다.
따라서 n =5의 경우 출력은 다음과 같습니다. -
[ [ 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 1 ], [ 1, 1, 1, 0, 1 ], [ 1, 0, 0, 0, 1 ], [ 1, 1, 1, 1, 1 ] ]
예시
다음은 코드입니다 -
const num = 5;
const spiralize = (num = 1) => {
const arr = [];
let x, y;
for (x = 0; x < num; x++) {
arr[x] = Array.from({
length: num,
}).fill(0);
}
let left = 0;
let right = num;
let top = 0;
let bottom = num;
x = left;
y = top;
let h = Math.floor(num / 2);
while (left < right && top < bottom) {
while (y < right) {
arr[x][y] = 1;
y++;
}
y--;
x++;
top += 2;
if (top >= bottom) break;
while (x < bottom) {
arr[x][y] = 1;
x++;
}
x--;
y--;
right -= 2;
if (left >= right) break;
while (y >= left) {
arr[x][y] = 1;
y--;
}
y++;
x--;
bottom -= 2;
if (top >= bottom) break;
while (x >= top) {
arr[x][y] = 1;
x--;
}
x++;
y++;
left += 2;
}
if (num % 2 == 0) arr[h][h] = 1;
return arr;
};
console.log(spiralize(num)); 출력
다음은 콘솔 출력입니다 -
[ [ 1, 1, 1, 1, 1 ], [ 0, 0, 0, 0, 1 ], [ 1, 1, 1, 0, 1 ], [ 1, 0, 0, 0, 1 ], [ 1, 1, 1, 1, 1 ] ]