백준공부/java

[백준] 30460번 스위치 (gold 5

gomduri43 2023. 11. 6. 23:27

import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        long answer=0;
        int n=Integer.valueOf(br.readLine());
        int[] num=new int[n+2];
        StringTokenizer st=new StringTokenizer(br.readLine());
        for(int i=1; i<=n; i++){
            num[i]=Integer.valueOf(st.nextToken());
            answer+=num[i];
        }
        int[] dp=new int[n+1];
        for(int i=1; i<=n-1; i++){
            dp[i]=num[i]+num[i+1]+num[i+2];
            if(dp[i]<0){
                dp[i]=0;
            }
        }
        dp[n]=num[n]<0 ? 0 : num[n];
        int max=Integer.MIN_VALUE;
        for(int i=1; i<=n; i++){
            if(i<4){
                max=Math.max(max,dp[i]);
            }
            else if(i==4){
                dp[i]=dp[i]+dp[i-3];
            }
            else if(i>=5){
                dp[i]=Math.max(dp[i]+dp[i-3], Math.max(dp[i]+dp[i-4], dp[i]+dp[i-5]));
            }
            max=Math.max(dp[i],max);
        }

        answer+=max;
        bw.write(answer+"");
        bw.flush();
    }
}