알고리즘/프로그래머스

연속 펄스 부분 수열의 합

베리영young 2024. 9. 26. 21:24

사용 알고리즘: DP

사용 언어: java

 

import java.util.*;

class Solution {
    static long[] pSequence, mSequence, pDp, mDp;
    
    public long solution(int[] sequence) {
        init(sequence);
        
        pDp[0] = pSequence[0];
        mDp[0] = mSequence[0];
        for(int i=1; i<sequence.length; i++) {
            pDp[i] = Math.max(pSequence[i], pDp[i-1] + pSequence[i]);
            mDp[i] = Math.max(mSequence[i], mDp[i-1] + mSequence[i]);
        }
        long answer = Long.MIN_VALUE;
        for(int i=0; i<sequence.length; i++) {
            answer = Math.max(pDp[i], Math.max(answer, mDp[i]));
        }
        //System.out.println(Arrays.toString(pDp));
        //System.out.println(Arrays.toString(mDp));
        return answer;
    }
    
    static void init(int[] sequence) {
        pSequence = new long[sequence.length];
        mSequence = new long[sequence.length];
        pDp = new long[sequence.length];
        mDp = new long[sequence.length];
        
        long gop = 1;
        for(int i=0; i<sequence.length; i++) {
            pSequence[i] = sequence[i] * gop;
            gop *= -1;
            mSequence[i] = sequence[i] * gop;
        }
        
        //System.out.println(Arrays.toString(pSequence));
        //System.out.println(Arrays.toString(mSequence));
    }
}

 

 

우앗 풀었다

DP에 누적합을 저장하는 건 맞는데, -> 이게 아니라 <- 이 느낌이다.

-> : 인덱스가 하나씩 커질 때마다, 여태 나올 수 있는 수 중 가장 큰 수를 저장

<- : 지금 인덱스가 배열의 마지막이라고 생각하고, 여태까지 중에 가장 큰 수 구하기!

'알고리즘 > 프로그래머스' 카테고리의 다른 글

리코쳇 로봇  (0) 2024.10.11
테이블 해시 함수  (0) 2024.10.04
등대 !  (0) 2024.09.25
대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기  (1) 2024.09.18
헤비 유저가 소유한 장소  (0) 2024.09.18