
-Code
import java.io.*;
import java.util.*;
public class BOJ1535 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine());
// 감소 체력 셋팅
int[] hp = new int[cnt + 1];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 1; i <= cnt; i++) {
hp[i] = Integer.parseInt(st.nextToken());
}
// 기쁨 셋팅
int[] happy = new int[cnt + 1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= cnt; i++) {
happy[i] = Integer.parseInt(st.nextToken());
}
// dp 셋팅 (냅색 알고리즘)
int[][] dp = new int[cnt + 1][100];
for (int i = 1; i <= cnt; i++) {
int disHp = hp[i];
int incHappy = happy[i];
for (int j = 1; j < 100 ; j++) {
// hp가 0이면 안되므로 100 미만인 경우
if (j >= disHp) {
// 이전 값에 현재 기쁨 증가 더해서 최대값 비교
int temp = dp[i - 1][j - disHp] + incHappy;
dp[i][j] = Math.max(dp[i - 1][j], temp);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
System.out.println(dp[cnt][99]);
}
}
dp인데 2개의 배열이 주어져서 뭔가 몰라 알고리즘 분류를 보니 냅색 문제였습니다. 그래서 이전에 푼 것과 비슷하게 작성했으나 두 번째 푸는 냅색 알고리즘이라 index를 잘못 입력한 것과 체력이 100 미만이 유지돼야 하는 부분을 간과하여 틀렸었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 34667번 가희와 철도역 (0) | 2026.01.21 |
|---|---|
| [백준/Java] 2583번 영역 구하기 (0) | 2026.01.20 |
| [백준/Java] 1446번 지름길 (0) | 2026.01.20 |
| [백준/Java] 1309번 동물원 (0) | 2026.01.20 |
| [백준/Java] 18221번 교수님 저는 취업할래요 (0) | 2026.01.20 |