본문 바로가기

언어/Javascript

PS속 스프레드 문법과 Rest문법 분석 과정

 

function solution(land) {
    lengthFourArray = Array(4).fill(0).map((cur, idx) => cur + idx);
    lengthLandArray = Array(land.length).fill(0).map((cur,idx) => cur + idx);

    for (let land_height_idx of lengthLandArray){
        
        if (land_height_idx === 0) continue;
        
        for (let land_weight_idx in lengthFourArray){
            let maxValue = 0;
            
            for (let idx of lengthFourArray){
                
                if (land_weight_idx != idx){
                    if (maxValue < land[land_height_idx - 1][idx]) {maxValue = land[land_height_idx - 1][idx]
                    }
                }
            }
            land[land_height_idx][land_weight_idx] += maxValue;
        }
    }
    return Math.max(...land[land.length - 1])
}

이렇게 C언어 스타일로 PS를 푸는 과정에서 return문에 꼭 ...이 들어가야하나? ...이 있고 없고 찍히면 어떻게 찍히지? 왜 그냥은 안될까? 고민했다.

 

보통 블로그들에선 Math.max에 ...을 넣어서 쓴다에 그쳐있었다.

그래서 찾아보았다.

배열에 ...array를 쓸 경우

const result = [1,2,3,4]
console.log(...result) // 1 2 3 4
console.log(result) // [1,2,3,4]

요런식으로 리턴되었다.

즉 요컨데, 하나로 뭉쳐 있는 여러 값들의 집합을 펼쳐서 안의 원소들의 개별적인  목록으로 반환한다.

그렇기에 Math.max는 인자로 배열이 아닌, 여러개의 값 목록을 받길 원하는데 그렇기에 ...array로 사용해야한다.

그렇다면 이차원 배열의 경우는 어떨까?

    const result = [[1],[2],[3],[4]]
    console.log(...result) // [1][2][3][4]

이런식으로 가장 바깥 배열이 벗겨져서 나온다.

 

이와 유사한 자매품으로 rest 파라미터가 있는데,

rest 파라미터는 파라미터 끝 또는 객체 배열에서 비구조화 할당( 객체일시 {}, 배열일시 [] ) 에서만 쓰인다.

이는 개별적 목록 펼쳐서 들어가는 것이 아닌 펼치지 않고 그 자체가 들어간다.

 

 

결론 :  인자로 받는 파라미터를 잘 살펴보자.