알고리즘, 자료구조/Codility

[Javascript] Codility Lesson9 - MaxSliceSum

jaee 2022. 6. 22. 22:00


문제: https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_slice_sum/

문제 요약

  • 정수로 구성된 배열 A가 주어졌을 때, 합산 결과가 가장 큰 연속 구간의 합을 구하여라.

 

풀이

function solution(A) {
    let maximum = A[0];
    // 누적값을 저장할 변수 accum
    let accum = A[0];

    for(let i = 1; i < A.length; i++) {
        // 누적값과 A[i]의 합이 A[i]보다 작으면 accum을 A[i]로 변경한다
        accum = accum + A[i] < A[i] ? A[i] : accum + A[i];
        // accum이 maximumq보다 크면 maximum을 accum으로 변경한다
        maximum = accum > maximum ? accum : maximum;
    };

    return maximum;
}

https://app.codility.com/

이렇게 연속된 구간의 합산 or 연속된 구간의 양 끝 값 계산과 같은 문제를 풀 때 아래 2개 컨셉을 기억해야겠다.
1) 메모이제이션을 사용하여 중첩 루프문을 피할 것
2) 루프는 끝까지 돌되, 문제가 요구하는 바에 따라 시작점은 변경될 수 있다는 것