반응형
문제 출처 : https://www.acmicpc.net/problem/11052
이 문제는 다이나믹 프로그래밍으로 풀 수 있다.
문제가 장황하여 주의력이 산만해지지만 침착하게 읽어보자. 카드팩의 배열이 배열의 인덱스는 카드의 갯수이고 배열의 값은 카드의 금액이다. 이 두가지 정보가 한 배열에 들어 있기 때문에 조금 헷갈릴 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.util.*; public class Q11052 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] card = new int[n+1]; int[] d = new int[n+1]; for (int i = 1; i <= n; i++) { card[i] = sc.nextInt(); } for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { if(d[i] < card[j] + d[i-j]) { d[i] = card[j] + d[i-j]; } } } System.out.println(d[n]); } } | cs |
for 문 안의 배열은 인덱스가 중요하다. 마지막 구매하는 카드를 중점으로 생각해보면 card[j]를 구매했을 때 그 이전에 구매한 것은 d[i-j]이다. d[i-j]는 이미 구해진 것으로 가정한다. d 배열은 카드 n개를 구매하는 최대 비용이므로 d[i-j]는 j개의 카드 구해만 것을 제외한 최대 비용이다.
반응형
'프로그래밍 > Algorithm' 카테고리의 다른 글
[백준] 11279 최대 힙 풀이 (0) | 2019.01.31 |
---|---|
[백준] 7576 토마토 풀이 (0) | 2019.01.31 |
[백준 알고리즘] 2156 - 포도주 시식 (0) | 2018.11.19 |
[프로그래머스] 모의고사 (0) | 2018.10.21 |
[프로그래머스] K번째 수 (0) | 2018.10.21 |