곽로그

[백준 2156, Java] 포도주 시식 본문

알고리즘/백준

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

일도이동 2020. 11. 16. 12:52
반응형

문제

www.acmicpc.net/problem/2156

 

2156번: 포도주 시식

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

www.acmicpc.net

check

- 초기화 하는걸 더 간단하게 하는 방법 

 

코드

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

public class Main {
    public static int N;
    public static int[] wineLiters;
    public static int[][] maxDrink;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        N = Integer.parseInt(br.readLine());
        wineLiters = new int[N+1];
        maxDrink = new int[N+1][2];     //N 번째 와인을 안먹을때(0)의 최댓값, 먹을때(1)의 최댓값
        for(int index =1; index<=N; index++){
            wineLiters[index] =Integer.parseInt(br.readLine());
        }
        int result = calculateMax();
        bw.write(String.valueOf(result));
        bw.flush();

        br.close();
        bw.close();
    }
    public static int calculateMax(){
        for(int n =1 ; n<=N ; n++){
            if(n==1){
                maxDrink[1][0] = 0;
                maxDrink[1][1] = wineLiters[1];
            }
            else if (n==2){
                maxDrink[2][0] = Math.max(maxDrink[n-1][0], maxDrink[n-1][1]);
                maxDrink[2][1] = Math.max(maxDrink[n-1][0], maxDrink[n-1][1]) + wineLiters[2];
            }
            else{
                // n번째 와인까지 마신 최댓값을 구할때, n번째 와인을 선택하지 않은 경우의 최댓값
                maxDrink[n][0] = Math.max(maxDrink[n-1][0], maxDrink[n-1][1]);

                // n번째 와인까지 마신 최댓값을 구할때, n번째 와인을 선택한  경우의 최댓값
                maxDrink[n][1] = Math.max(maxDrink[n-2][0] + wineLiters[n-1], maxDrink[n-1][0])+ wineLiters[n];
            }
        }

        return Math.max(maxDrink[N][0],maxDrink[N][1]);
    }
}

 

코드 2020.12.08

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

public class Main {
    public static int N;
    public static int[] wines;
    public static int[][] memo;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        N = Integer.parseInt(br.readLine());
        wines = new int[N+1];
        memo = new int[N+1][2];
        for(int index = 1; index<=N; index++){
            wines[index] = Integer.parseInt(br.readLine());
        }

        calculateMaxWine();
        int result = getMaxWine();
        bw.write(String.valueOf(result));
        bw.flush();

    }
    public static void calculateMaxWine(){
        for(int index = 1; index<=N; index++){
            if(index ==1){
                memo[index][1] = wines[index];
            }
            else{
                memo[index][0] = Math.max(memo[index-1][0],memo[index-1][1]);
                memo[index][1] = Math.max(memo[index-1][0], memo[index-2][0]+wines[index-1]) + wines[index];
            }
        }
    }
    public static int getMaxWine(){
        return Math.max(memo[N][0],memo[N][1]);
    }
}
반응형

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

[백준 13398, Java] 연속합2  (0) 2020.11.18
[백준 1932, Java] 정수 삼각형  (0) 2020.11.16
[백준 11057, Java] 오르막 수  (0) 2020.11.16
[백준 1309, Java] 동물원  (0) 2020.11.16
[백준1149, Java] RGB거리  (0) 2020.11.15
Comments