ex6) dp[6]
ex7) dp[7]
#include <iostream>
#include <algorithm>
using namespace std;
#define X -1
int dp[5010] = { 0, X, X, 1, X, 1 };
int N;
int main() {
scanf("%d", &N);
for (int i = 6; i <= N; i++) {
if (dp[i - 3] == X && dp[i - 5] == X) {
dp[i] = X;
continue;
}
if (dp[i - 3] == X || dp[i - 5] == X) {
dp[i] = max(dp[i - 3] + 1, dp[i - 5] + 1);
continue;
}
dp[i] = min(dp[i - 3] + 1, dp[i - 5] + 1);
}
printf("%d", dp[N]);
}
#include <iostream>
#include <algorithm>
using namespace std;
#define X 5000
int dp[5010] = { 0, X, X, 1, X, 1 };
int N;
int main() {
scanf("%d", &N);
for (int i = 6; i <= N; i++)
dp[i] = min(dp[i - 3] + 1, dp[i - 5] + 1);
if (dp[N] >= X) {
printf("-1");
return 0;
}
printf("%d", dp[N]);
}
if (dp[N] >= X) {
printf("-1");
return 0;
}
따라서, 이 조건이 참이라면:
-> 이 조건문은 N을 3과 5로 나눌 수 없는 경우를 처리하는 부분입니다. 초기화 값 X (5000)를 사용하여 특정 값을 3과 5로 나눌 수 없는 경우를 나타내며, dp[N]이 이 값 이상이라면 -1을 출력하고 프로그램을 종료합니다. 그렇지 않다면 dp[N] 값을 출력하여 최소 횟수를 나타냅니다.
-> 위의 for문에서 `dp[i] = min(dp[i - 3] + 1, dp[i - 5] + 1);` 이 코드를 돌려서 dp[i-3]+1도, dp[i-5]+1 모두 X라면 dp[i] = X 이므로 이거를 다 모아서 나중에 if문으로 처리하는 것이다!!!