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 파라미터는 파라미터 끝 또는 객체 배열에서 비구조화 할당( 객체일시 {}, 배열일시 [] ) 에서만 쓰인다.
이는 개별적 목록 펼쳐서 들어가는 것이 아닌 펼치지 않고 그 자체가 들어간다.
결론 : 인자로 받는 파라미터를 잘 살펴보자.
'언어 > Javascript' 카테고리의 다른 글
[클린코드 자바스크립트] 함수 (0) | 2022.09.01 |
---|---|
async 콘솔에 찍어본 기록 (0) | 2022.08.19 |
집합의 교집합 차집합 대칭차집합 (0) | 2022.08.14 |
Array.prototype.join() (0) | 2022.08.12 |
prototype.includes(), in 연산자, hasOwnProperty(), Array.prototype.some (0) | 2022.08.12 |