코딩테스트/백준

[Java] 백준 2156 : 포도주 시식

플래시🦥 2023. 2. 3.
반응형
https://www.acmicpc.net/problem/2156 

 

2156번: 포도주 시식

효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규

www.acmicpc.net


dp[] = 포도주를 최대로 마신양

arr[] = 포도주 별 양

 

세번 연속 마실 수 없다는 규칙이 있을 때 효주가 포도주를 많이 마셔 볼 수 있는 방법은 아래와 같다. 

 

1. 0번 : O , dp[0]= arr[0]

2. 1번 : OO , dp[1]= dp[0]+arr[1]

3. 2번 : OOX / OXO / XOO , dp[2]=Math.max(dp[1],(Math.max(arr[0], arr[1])+arr[2]));

4. 3번~N-1번 : ???X / OOXO / OXOO , dp[3]=Math.max(dp[2],Math.max(dp[1], dp[0]+arr[2])+arr[3]);


import java.util.*;

public class Main {
	
	static int N;
	static int[] arr,dp;
	
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		N=sc.nextInt();
		arr=new int[N];
		dp=new int[N];
		
		for(int i=0;i<N;i++) {
			arr[i]=sc.nextInt();
		}
		
		dp[0]=arr[0];
		
		for(int i=1; i<N;i++) {
			if(i==1) {
				dp[1]=dp[0]+arr[1];
			}
			else if(i==2) {
				dp[2]=Math.max(dp[1],(Math.max(arr[0], arr[1])+arr[2]));
			}
			else {
				dp[i]=Math.max(dp[i-1],Math.max(dp[i-2], dp[i-3]+arr[i-1])+arr[i]);
			}
		}
		
		System.out.println(dp[N-1]);				
		
	}// main()
	
}// class Main
728x90
반응형

댓글