Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

PS/프로그래머스

[프로그래머스][dp] 연속 펄스 부분 수열의 합

by 꽁이꽁설꽁돌 2025. 12. 1.
728x90
반응형
     
목차

     

    문제

    https://school.programmers.co.kr/learn/courses/30/lessons/161988

     

    프로그래머스

    SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

     

     

    문제 구현 방향

    이중순회하면 시간 초과가 나기때문에 무조건 O(n)으로 해결해야 한다.

    이때 누적합을 이용했다.

    이때 -1 1 -1순일 때와 1 -1 1 순일때로 dp를 나누어서 생각하면 된다.

     

    코드 구현

    function solution(sequence) {
        var answer = -Infinity;
        
        const oddDp = [];
        const evenDp = [];
        oddDp.push(-sequence[0]);
        evenDp.push(sequence[0]);
        
        answer = Math.max(answer, evenDp[0], oddDp[0]);
        
        for (let i = 1; i < sequence.length; i++) {
            const s = sequence[i];
            if (i % 2 === 0) {
                oddDp.push(Math.max(oddDp[i-1] + -s, -s));
                evenDp.push(Math.max(evenDp[i-1] + s, s));
            } else {
                oddDp.push(Math.max(oddDp[i-1] + s, s));
                evenDp.push(Math.max(evenDp[i-1] + -s, -s));
            }
            answer = Math.max(answer, evenDp[i], oddDp[i]);
        }
        
        return answer;
    }
    반응형