문제 정보

풀이

DP, 보다 정확하게는 DP를 활용한 카데인 알고리즘을 활용하는 문제다.

다만 펄스 수열이 -1로 시작하는 경우와 1로 시작하는 수열 두 경우가 있기 때문에 각각의 경우에 대해 카데인 알고리즘을 두 번 실행해야 한다.

코드

import java.util.*;
 
class Solution {
    public long solution(int[] sequence) {
        long pulse1 = kadane(sequence, true);
        long pulse2 = kadane(sequence, false);
        
        return Math.max(pulse1, pulse2);
    }
    
    private long kadane(int[] sequence, boolean startPlus) {
        long max = Long.MIN_VALUE;
        long cur = 0;
        
        for (int i = 0; i < sequence.length; i++) {
            long value;
            if (startPlus)
                value = sequence[i] * (i % 2 == 0 ? 1 : -1);
            else
                value = sequence[i] * (i % 2 == 0 ? -1 : 1);
            
            cur = Math.max(value, cur + value);
            
            max = Math.max(max,cur);
        }
        
        return max;
    }
}

관련 노트