[알고리즘] 백준 - 2156 ( 포도주 시식 ) / 자바

배고픈메꾸리·2021년 3월 3일
0

알고리즘

목록 보기
57/128
import java.io.BufferedReader;
import java.io.InputStreamReader;


class Solution {
	public static void main(String args[]) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		
		
		// 일반항이 최소 4개의 원소를 필요로 함
		int[] arr = new int[N+3];
		int[] dp = new int[N+3];  
		
		// 포도주 입력 받기
		for (int i = 0; i < N; i++) {
			arr[i] = Integer.parseInt(br.readLine());
		}

		
		int temp = 0; // i = 0 , 1 일 때 사용할 변수
		
		
		//1. 포도주를 이전이 2잔 마셨을 경우 ( 이번 인덱스는 못 마심 )
		//2. 포도주를 직전에 한잔 마셨을 경우( 이번 인덱스를 마실수도 , 안 마실수도 있음) => 어떤게 이득인지 다음 인덱스에서 자동으로 비교됨
		//3. 포도주를 직전에 마시지 않았을 경우 ( 이번 인덱스를 마실수도 , 안 마실수도 있음 )  => 마찬가지
		for(int i = 0 ; i <N; i ++) {
			if(i <2) {
				temp+=arr[i];
				dp[i] =temp;
				continue;
			}else if(i == 2 ) {
				dp[i] = Math.max(arr[2]+arr[0],Math.max(arr[0]+arr[1], arr[1]+arr[2]));
				continue;
			}
			dp[i] = Math.max(dp[i-1], Math.max(dp[i-2]+arr[i], dp[i-3]+arr[i]+arr[i-1]));

		}
		
		
		//최댓값 찾기
		int max = 0;  
		for(int i = 0 ; i < N ; i ++) {
			max = max > dp[i] ? max :dp[i];
		}
		System.out.print(max);
	}
}

profile
FE 개발자가 되자

0개의 댓글