Codility - MaxDoubleSliceSum

RESULT

각 위치를 경계로 미리 구해놓은 전과 후의 최대값의 부분을 더해 그 중에서의 최대값을 구하는 로직.

import java.util.*;

class Solution {
    public int solution(int[] A) {
        int[] fowardMaxSum = new int[A.length];
        int[] backwardMaxSum = new int[A.length];
        int maxSum = 0;
        
        for (int i=1; i<A.length-1; i++) {
            fowardMaxSum[i] = Math.max(fowardMaxSum[i-1] + A[i], 0);
        }
        
        for (int i=A.length-2; i>1; i--) {
            backwardMaxSum[i] = Math.max(backwardMaxSum[i+1] + A[i], 0);
        }
        
        for (int i=1; i<A.length-1; i++) {
            maxSum = Math.max(maxSum, fowardMaxSum[i-1] + backwardMaxSum[i+1]);
        }
        
        return maxSum;
    }
}