반응형
 


다이나믹 프로그래밍을 이용해서 풀어낼 수 있는 문제.
dp[n] = n개의 붕어빵을 팔았을 때 얻을 수 있는 최대 이익.
 
X명의 사람에게 붕어빵 [ N ]개를 팔아야 한다. 맨 처음 사람에게 [ i ]개의 붕어빵을 팔았다고 하면 X-1명의 사람들에게는 [ N-i ]개의 붕어빵을 팔아야 한다.
(사람의 수 X는 중요하지 않다. 어차피 다 팔린다고 가정을 하고 풀기 때문. 이해하기 쉽도록 X명이 있다고 표현)
 
점화식으로 풀어보자.
dp[N] = max( p[i] + dp[N-i] , dp[N] )
 
N개를 한번에 다 파는 경우가 가장 비쌀 수도 있기 때문에, max를 이용해서 최대값을 뽑아낸다.
 
< 코드작성 >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.Scanner;
 
public class test {
    
    public static void main(String args[]) {
        
        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();
        int[] dp = new int[n+1];
        int[] p = new int[n+1];
        
        for (int i=1; i<=n; i++) {
            p[i] = sc.nextInt();
        }
        
        
        for (int i=1; i<=n; i++) {
            for (int j=1; j<=i; j++) {
                dp[i] = Math.max(p[j] + dp[i-j], dp[i]);
            }
        }
        
        System.out.println(dp[n]);
        
    }
cs

< 출력결과 >

- 문제 예제 출력 결과



- 실제 출력 결과


 





반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기