https://www.acmicpc.net/problem/2839
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
int count = 0;
while (N >= 0) {
if (N % 5 == 0) {
count += (N / 5);
cout << count << endl;
return 0;
}
N -= 3;
count++;
}
cout << -1 << endl;
return 0;
}
#include <iostream>
using namespace std;
int dp[5001];
int main() {
int n;
cin >> n;
dp[3] = dp[5] = 1;
for (int i = 6; i <= n; i++) {
if (dp[i - 3]) dp[i] = dp[i - 3] + 1;
if (dp[i - 5]) dp[i] = dp[i] ? min(dp[i] , dp[i - 5] + 1) : dp[i - 5] + 1;
}
cout << (dp[n] == 0 ? -1 : dp[n]) << endl;
return 0;
}
dp방식으로도 풀 수 있다는 것을 알았다.
최소를 구하는 방식으로 접근한다면 dp방식도 생각해볼만한 방식이라고 생각했다.