[백준, JAVA] 2156번 : 포도주 시식

seunguk noh·2023년 8월 8일
0

Algorithm

목록 보기
20/23

1. 문제

2. 아이디어

3. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
		int N = Integer.parseInt(br.readLine());
 
		int[] dp = new int[N + 1];
		int[] arr = new int[N + 1];
 
 
		for (int i = 1; i <= N; i++) {
			arr[i] = Integer.parseInt(br.readLine());
		}
 
		// index = 0 은 시작점
		dp[1] = arr[1];
		
		if (N > 1) {
			dp[2] = arr[1] + arr[2];
		}

		for (int i = 3; i <= N; i++) {
			dp[i] = Math.max(dp[i - 1], Math.max(dp[i - 2] + arr[i], dp[i - 3] + arr[i - 1] + arr[i]));
 
		}
		System.out.println(dp[N]);
 
	}
 
}

4. 느낀점

  • 계단 오르기 문제를 열심히 풀었더니 쉬웠다!

  • DP 문제들은 index 및 dp/arr 배열 활용 로직을 고민하는 것이 중요하다.
    (역시 경우의 수를 몇가지 적어보는 것이 아주 좋다.)

0개의 댓글