상세 컨텐츠

본문 제목

백준 2156번

백준 알고리즘 풀이

by 발발개발 2021. 1. 28. 18:45

본문

원본 : www.acmicpc.net/problem/2156

 

2156번: 포도주 시식

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

www.acmicpc.net

 

풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
	public static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));

	public static void main(String[] args) throws Exception {

		int n = Integer.parseInt(reader.readLine());
		int arr[] = new int[n];
		
		for (int i = 0; i < n ; i++) {
			arr[i] = Integer.parseInt(reader.readLine());
		}
		
		if (n == 1) {
			writer.write(arr[0] + "");
			writer.flush();
			return;
		} else if (n == 2) {
			writer.write(arr[0] + arr[1] + "");
			writer.flush();
			return;
		}
		
		int max[] = new int[n];
		max[0] = arr[0];
		max[1] = arr[1] + arr[0];
		max[2] = maxValue(arr[2] + arr[1], arr[2] + max[0]);
		max[2] = maxValue(max[2], max[1]);
		for (int i = 3; i < n; i++) {
			max[i] = maxValue(arr[i] + arr[i - 1] + max[i - 3], arr[i] + max[i - 2]);
			max[i] = maxValue(max[i], max[i - 1]);
		}
		
		writer.write(maxValueInArray(max) + "");
		
		writer.flush();
	}
	
	public static int maxValue(int a, int b) {
		if (a <= b) {
			return b;
		} else {
			return a;
		}
	}
	
	public static int maxValueInArray(int arr[]) {
		int max = 0;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] >= max) {
				max = arr[i];
			}
		}
		return max;
	}

}

'백준 알고리즘 풀이' 카테고리의 다른 글

백준 11054번  (0) 2021.02.02
백준 11053번  (0) 2021.02.02
백준 10844번  (0) 2021.01.28
백준 1463번  (0) 2021.01.27
백준 2579번  (0) 2021.01.27

관련글 더보기

댓글 영역