달팽이 탐색의 문제이다. 주요 포인트는 풀이가 용이하도록 실제 보드와 같은 배열을 우선 만든 후에
+1
, -1
이 될 수 있도록 신호를 조절하며 모든 보드를 채우면 된다.
interface Array<T> {
snail(rowsCount: number, colsCount: number): number[][];
}
Array.prototype.snail = function(rowsCount: number, colsCount: number): number[][] {
// 잘못된 배열이 입력될 경우 빈 배열 반환
if((rowsCount * colsCount) !== this.length) return []
// 보드판 생성
const board = Array.from({length: rowsCount}, () => Array(colsCount))
for (let idx = 0, row = 0, col = 0, sign = 1; idx < this.length; idx++) {
board[row][col] = this[idx]
row += sign
// Y축 끝에 다다랐다면
if (row === rowsCount || row === -1) {
// 승강/하강 부호 변경
sign *= -1
row += sign
// 다음 줄
col++
}
}
return board
}