문제 해설

Input: gain = [-5,1,5,0,-7]
Output: 1
Explanation: The altitudes are [0,-5,-4,1,1,-6]. The highest is 1.

배열이 주어지는데 고도 0부터 시작하여 배열 원소만큼 위, 아래로 높아졌다가 낮아진다고 할 때 가장 높은 고도를 리턴하는 문제입니다

내가 푼 코드

const largestAltitude = function(gain) {
    let altitudes = 0
    
    const sum = gain.reduce((prev, curr) => {
        if(prev > altitudes)
            altitudes = prev
        return prev + curr
    }, 0)
    
    return altitudes > sum ? altitudes : sum
};

reduce를 이용하여 prev와 값을 비교하면 될거라고 생각했는데 테스트 케이스를 보고 알았지만 마지막값이 반영되지 않았습니다. 그래서 제일 마지막값인 sum과 값을 계산하면서 가장 높았던 고도를 가지고 있는 altitudes를 비교하기로 했고 정상적으로 작동하였습니다.

 

남이 푼 코드

var largestAltitude = function(gain) {
    
    for(i = 1; i <= gain.length-1; i++) gain[i] += gain[i-1];
    return Math.max(...gain) < 0 ? 0 : Math.max(...gain);
    
};

다른 코드들도 위 코드와 상당히 비슷하게 작성되어 있었지만 가져온 코드가 제 코드랑 유사하기 때문에 정리하였습니다.

저는 reduce를 사용하여 해결했는데 reduce로 접근하는게 아닌 기존 원본 배열에 직접 접근하여 원본 배열에 값 자체를 바꾼 뒤 최대값을 찾는 방식으로 해결한 것을 확인했습니다.

 

아무래도 reduce같은 배열 api들은 원본 배열을 바꾸지 않으며 진행하다보니 코드를 실행하는데 있어 조금 더 걸리는 듯 했고 앞으로 내장 api보다는 for문으로만 접근해볼 예정입니다

복사했습니다!