포스트잇
[백준] 12865번 : 평범한 배낭 (JAVA) 본문
1. 문제 분석
이번 문제도 DP를 활용하면 풀 수 있는 문제이다. 우리가 DP를 배운다면 많이 들어봤을 배낭 문제이다.
시간복잡도 : O(NxK)
알고리즘 : DP
2. 문제 풀이
기본적으로 많이 배우는 배낭문제랑 다를게 없다.
- 배낭 무게가 불가한 경우 : 이전 차수(i)의 가치값을 그대로 가져온다.
- dp[i][w]=dp[i−1][w]
- 배낭에 추가가 가능한 경우 : 현재 물건의 가치 + 남은 무게 만큼의 가치 값
- dp[i][w]=max(dp[i−1][w],dp[i−1][w−weight[i]]+value[i])
3. 코드 구현
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_12865 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int[] val = new int[N+1];
int[] weight = new int[N+1];
for(int i = 1; i <= N; i++){
st = new StringTokenizer(br.readLine());
weight[i] = Integer.parseInt(st.nextToken());
val[i] = Integer.parseInt(st.nextToken());
}
int[][] dp = new int[N+1][K+1];
for(int i = 1; i <= N; i++){
for(int j = 1; j <= K; j++){
if(weight[i] > j){
dp[i][j] = dp[i-1][j];
}
else{
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-weight[i]]+val[i]);
}
}
}
System.out.println(dp[N][K]);
}
}
'코딩테스트' 카테고리의 다른 글
[백준] 2775번 : 부녀회장이 될테야 (JAVA) (0) | 2025.02.24 |
---|---|
[백준] 12920번 : 평범한 배낭2 (JAVA) (0) | 2025.02.24 |
[백준] 2579번 : 계단 오르기 (JAVA) (0) | 2025.02.21 |
[백준] 1463번 : 1로 만들기 (JAVA) (0) | 2025.02.21 |
[백준] 1149번 : RGB거리 (JAVA) (0) | 2025.02.20 |