곽로그
[백준 2156, Java] 포도주 시식 본문
반응형
문제
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