문제
숫자 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 ] ]