코딩테스트 연습

leetcode 코딩테스트 연습 - 2624. Snail Traversal (JavaScript)

citron031 2023. 8. 1. 23:17

이번 문제는 Array의 prototype에 고차 함수를 직접 구현하는 문제였다.

this가 호출한 배열을 가르킨다는 것을 이번 문제를 해결하면서 처음 알게되어 의미가 깊다.

/**
 * @param {number} rowsCount
 * @param {number} colsCount
 * @return {Array<Array<number>>}
 */
Array.prototype.snail = function(rowsCount, colsCount) {
    if(rowsCount * colsCount !== this.length) {
        return [];
    }
    const result = [];
    for(let i = 0; i < rowsCount; i++) {
        result.push([]);
    }
    let row = 0;
    let isAscending = true;
    for(let i = 0; i < this.length; i++) {
        result[row].push(this[i]);
        if(isAscending) {
            if(row + 1 === rowsCount) {
                isAscending = false;
            } else {
                row += 1;
            }
        } else {
            if(row === 0) {
                isAscending = true;
            } else {
                row -= 1;
            }
        }        
    }
    return result;
}

/**
 * const arr = [1,2,3,4];
 * arr.snail(1,4); // [[1,2,3,4]]
 */

문제 자체는 그래도 손쉽게 해결할 수 있었다.

이중 for문을 사용하지 않고 일차원 배열을 순회하면서 변수로 조건을 주어 문제를 해결하였다.