

-Code
import java.io.*;
import java.util.*;
public class BOJ11052 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] cardVal = new int[n + 1];
for (int i = 1; i <= n; i++) {
cardVal[i] = Integer.parseInt(st.nextToken());
}
// dp
int[] dp = new int[n + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
// 각 비용을 비교해서 최대값 저장
// 1 - n개 고를때 최대 값 저장
dp[i] = Math.max(dp[i], dp[i - j] + cardVal[j]);
}
}
System.out.println(dp[n]);
}
}
1개 골랐을 최대값 부터 n개까지 고르면서 최대값을 계산하는 것까지는 생각했지만 뭔가 그러면 계속 for문을 돌아야해서 이게 맞나 의심이 들었습니다. 하지만 그게 맞는 방향이어서 LIS 알고리즘처럼 짜는데 index 설정을 잘못잡아서 틀렸었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 16194번 카드 구매하기 2 (0) | 2026.01.17 |
|---|---|
| [백준/Java] 4117번 Combination Lock (0) | 2026.01.17 |
| [백준/Java] 9252번 LCS 2 (0) | 2026.01.16 |
| [백준/Java] 9251번 LCS (0) | 2026.01.16 |
| [백준/Java] 9151번 Starship Hakodate-maru (0) | 2026.01.16 |