[BOJ/Silver1] 2156번 포도주 시식 - JAVA[자바]

2025. 1. 5. 00:14·PS/백준
목차
  1. 문제풀이
  2. 1차 시도 - 성공

난이도 : 실버 1

유형 : DP(동적 계획법)

링크 : https://www.acmicpc.net/problem/2156

구현 시간 : 1시간

 

 

 

백준 이미지
백준 이미지

 

 

문제풀이

이 문제를 풀기 위해 DP의 Bottom-Up 방식을 사용하며, 9465번 스티커 문제와 같이 이전 선택에 따라 다음 선택이 제한된다.

연속 세 잔의 포도주를 마실 수 없기 때문에 마지막 잔의 앞 잔, 앞앞 잔의 값이 크다면 마지막 잔을 마시지 않을 수도 있다는 점도 고려해야 한다.

 

따라서 N 번째 잔의 최대값을 구하려면 아래와 같은 경우를 고려해야 한다.

  1. N 번째 잔을 마시지 않는다. 
  2. N 번째 잔을 마신다.
    1. N - 3 -> N - 1 -> N 번째 잔을 마신다.
    2. N - 2 -> N 번째 잔을 마신다.

 

위 경우를 고려해서 표현한 점화식은 아래와 같다.

DP[i] = max(DP[i-1], max(DP[i-2], DP[i-3] + graph[i-1]) + grape[i])

나의 경우는 N 번째 잔을 마시지 않는 경우는 생각하지 못해서 이 부분을 생각하는 것에 오랜 시간이 걸렸다.

위 점화식을 코드로 표현하면 아래와 같다.

 

 

 

1차 시도 - 성공

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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[] grape = new int[N + 1];
        
        for (int i = 1; i < N + 1; i++) {
            grape[i] = Integer.parseInt(br.readLine());
        }
        
        int[] dp = new int[N + 1];
        
        if (N == 1) {
            System.out.println(grape[1]);
            return;
        } else if (N == 2) {
            System.out.println(grape[1] + grape[2]);
            return;
        }
        
        dp[1] = grape[1];
        dp[2] = grape[1] + grape[2];
        
        for (int i = 3; i < N + 1; i++) {
            dp[i] = Math.max(dp[i - 1], Math.max(dp[i - 2], dp[i - 3] + grape[i - 1]) + grape[i]);
        }
        
        System.out.println(dp[N]);
    }
}

 

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

[BOJ/Gold3] 1005번 ACM Craft - JAVA[자바]  (0) 2025.01.09
[BOJ/Gold3] 11779번 최소비용 구하기 2 - JAVA[자바]  (0) 2025.01.08
[BOJ/Silver1] 9465번 스티커 - JAVA[자바]  (2) 2025.01.04
[BOJ/Silver3] 2193번 이친수 - JAVA[자바]  (0) 2025.01.04
[BOJ/Silver3] 2579번 계단 오르기 - JAVA[자바]  (0) 2025.01.03
  1. 문제풀이
  2. 1차 시도 - 성공
'PS/백준' 카테고리의 다른 글
  • [BOJ/Gold3] 1005번 ACM Craft - JAVA[자바]
  • [BOJ/Gold3] 11779번 최소비용 구하기 2 - JAVA[자바]
  • [BOJ/Silver1] 9465번 스티커 - JAVA[자바]
  • [BOJ/Silver3] 2193번 이친수 - JAVA[자바]
hongjeZZ
hongjeZZ
백엔드 개발자로서의 성장 과정을 기록합니다.
  • hongjeZZ
    Hong's Dev Note
    hongjeZZ
  • 전체
    오늘
    어제
    • 분류 전체보기 (40)
      • Back-End (9)
        • Java (0)
        • Spring (9)
        • Docker & Kubernetes (0)
      • Database (0)
        • MySQL (0)
        • Redis (0)
        • 데이터베이스 (0)
      • CS (4)
        • 운영체제 & 네트워크 (1)
        • 아키텍쳐 & 분산시스템 (0)
      • 회고 (0)
      • PS (27)
        • 백준 (16)
        • 알고리즘 (2)
        • 프로그래머스 (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    웹소켓
    우선순위큐
    컴퓨터구조
    CS
    mongodb
    Redis
    그래프 이론
    DP
    Spring
    시뮬레이션
    BFS
    구현
    spirng boot
    스택
    운영체제
    dfs
    문자열
    그리디
    큐
    Stomp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hongjeZZ
[BOJ/Silver1] 2156번 포도주 시식 - JAVA[자바]
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.