[Codility] MaximumSliceSum.cpp

세동네·2022년 7월 29일
0
post-thumbnail

코딜리티 MaximumSliceSum 문제 링크

카데인 알고리즘을 활용하면 쉽게 해결할 수 있는 문제이다.

· 카데인 알고리즘

카데인 알고리즘(Kadane's algorithm)은 다이나믹 프로그래밍을 활용한 알고리즘으로, 지금까지 구한 경우의 수 중 최댓값현재 원소 값 중 더 큰 값을 중간 최댓값으로 저장하는 것을 반복하는 간단한 문제이다. 말로는 조금 어렵게 느껴질 수 있는데, 아래 그림을 보자.

-1 원소를 포함하는 연속 부분합은 다섯 가지 경우가 있다. 우리는 이 값을 모두 활용하지 않을 것이다. 가장 큰 값만 기억하면 된다.

다섯 가지 경우에 새로운 숫자를 더했을 때 기존의 최댓값은 변함없이 최대일 것이며, 기존 최댓값이 음수일 경우 새로운 원소 자체가 더 큰 값일 수 있으므로 MAX(신규 원소, 기존 최댓값 + 신규 원소)를 최댓값으로 갱신해준다.

카데인 알고리즘을 적용한 코드 전문은 아래와 같다.

int solution(vector<int> &A) {
    long long local_max = -1000000;
    long long global_max = -1000000;

    for(auto ele : A){
        local_max = (local_max + ele > ele) ? local_max + ele : ele;
        global_max = (local_max > global_max) ? local_max : global_max;
    }
    return global_max;
}

출처

카데인 알고리즘 예시 이미지 출처
namic Programming - Kadane’s Algorithm (카데인 알고리즘)

0개의 댓글