🧫 문제 분석
✔️ 출처
📖 문제

풀었던 문제를 보다가 꼭 다시 풀라고 메모를 적어놔서 다시 풀었다.
DP로 풀 수 있는 문제이다.
3 과 5로 나눠 떨어지지 않는 1 , 2, 4, 7 은 -1로
3 5 은 1로 미리 초기화한다.
6도 미리 2로 초기화한다.
N - 3과 N - 5 중 더 작은 값을 취하고 +1해주면 dp[N] 이 된다.
N에서 3키로를 한 봉지를 담고 [N-3] 키로일때 얻은 봉지 최솟값과
N에서 5키로를 한 봉지를 담고 [N-5] 키로일때 얻은 봉지 최솟값 중 더 작은 값을 취하는 것이다.
dp[i] = Math.min(dp[i - 3], dp[i - 5]) + 1;
🔅 문제 풀이
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
int[] dp = new int[5001];
dp[1] = dp[2] = dp[4] = dp[7] = -1;
dp[3] = dp[5] = 1;
dp[6] = 2;
// 최솟 값을 찾아야하기에 -1인 값들은 잠시 100으로 높여놓는다.
if (num > 7) {
dp[1] = dp[2] = dp[4] = dp[7]= 100;
}
for (int i = 8; i <= num; i++) {
dp[i] = Math.min(dp[i - 3], dp[i - 5]) + 1;
}
bw.write(dp[num]+ "");
bw.flush();
bw.close();
}
}
❗ 오답노트 / 필요한 지식
- 예외 상황 (여기서는 7) 을 잘 찾아서 처리해주자.
'baekjoon > DP' 카테고리의 다른 글
백준 10844번 : 쉬운 계단 자바 (0) | 2024.08.26 |
---|---|
백준 11053번 : 가장 긴 증가하는 부분 수열 자바 (0) | 2024.08.26 |
백준 9461번 : 파도반 수열 자바 (0) | 2024.08.24 |
백준 2579번 : 계단 오르기 자바 (0) | 2024.08.15 |
백준 1436번 : 1로 만들기 자바 (0) | 2024.08.15 |