Java

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

프로버티기 2025. 4. 1. 09:44

문제

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

 

프로그래머스

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

programmers.co.kr

 

 

 

입출력

sequence

[2, 3, -6, 1, 3, -1, 2, 4]

 

result 

10

 


코드 

 

import java.util.*;
class Solution {
    public long solution(int[] sequence) {
        long answer = 0;
        int[] type1 = new int[sequence.length];
        int[] type2 = new int[sequence.length];
        for(int i = 0; i <  sequence.length; i++){
            if(i % 2 == 0) {
                type1[i] = sequence[i];  
                type2[i] = - sequence[i];
            } else {
                type1[i] = - sequence[i];
                type2[i] = sequence[i];
            }
        }
        long sum = max(type1);
        long sum2 = max(type2);
        answer = Math.max(sum, sum2);
        return answer;
    }
    static long max(int[] arr) {
        long max = arr[0];
        long sum = arr[0];
        for(int i = 1; i < arr.length; i++){
           sum = Math.max(arr[i], sum + arr[i]); // 현재 vs 누적 
           max = Math.max(max, sum);

        }
        return max;
    }
}