시간 & 메모리 제한
문제
입력 & 출력
DP를 이용한 문제풀이
package com.Back;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Back_1495 {
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 S = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] arr = new int[N+1];
boolean[][] dp = new boolean[N+1][M+1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
arr[i]=Integer.parseInt(st.nextToken());
}
dp[0][S]=true;
for (int i = 1; i <= N; i++) {
for (int j = 0; j <=M; j++) {
if(dp[i-1][j]) {
if(j+arr[i]<=M) {
dp[i][j+arr[i]]=true;
}
if(j-arr[i]>=0) {
dp[i][j-arr[i]]=true;
}
}
}
}
int ans=-1;
for (int i = 0; i <= M; i++) {
if(dp[N][i]) {
ans = Math.max(ans, i);
}
}
System.out.println(ans);
}
}
- 이 문제는 DP를 활용해서 문제 풀이를 할 수 있습니다.
- 일단은 dp를 이중 배열로 만들어야 된다는 것을 알 수 있습니다.
- 위 그림과 같이 만들도록 이중 for문을 돌려줍니다.
- 그 안에서 0보다 작은 경우와 10보다 큰 경우에 대해서 dp에 계산을 해줍니다.
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
백준_10773 균형잡힌 세상(자바)/자료구조 (0) | 2021.07.06 |
---|---|
백준_1010 다리 놓기(자바) /DP (0) | 2021.07.05 |
백준_2210 숫자판 점프(자바) / DFS + 백 트래킹 (0) | 2021.05.14 |
백준_1309 동물원(자바) / DP (0) | 2021.05.13 |
백준_5567 결혼식(자바) / 구현 (0) | 2021.05.12 |