๋ฐฑ์ค #2839 ์คํ ๋ฐฐ๋ฌ
# Greedy Algorithm
๐ก Idea
- N ํฌ๋ก๊ทธ๋จ์ ์ ํํ ๋ง๋ค๊ธฐ ์ํด์๋ 3kg, 5kg ์ค ๋ ๋ฌด๊ฑฐ์ด 5kg๋ก ๋๋ ๋ด์ผํ๋ค.
- 5kg์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ 5kg๋ก ๋๋์ด๋จ์ด์ง์ง ์๋๋ค๋ฉด 3kg๋ฅผ ๋นผ๊ณ cnt๋ฅผ ํ๋ ์ฆ๊ฐ์์ผ์ค๋ค.
Source Code
#include <iostream>
using namespace std;
int main() {
int N, cnt = 0;
cin >> N;
while (N >= 0) {
if (N % 5 == 0) {
cnt += N / 5;
break;
}
N -= 3;
cnt++;
if (N <= 0) break;
}
if (N < 0) cout << "-1";
else cout << cnt;
return 0;
}
# Dynamic Programming
- ํ๋์ ํฐ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์ ๋ก ๋๋์ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ์ฌ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ์ฌ์ฉ
- ์ ์ฅํด ๋ ๊ฐ์ ์ด์ฉ(๋ฉ๋ชจ์ด์ ์ด์
)
๐ก Idea
- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด dp ๋ฒกํฐ๋ฅผ ์์ฑํ ํ MAX ๊ฐ์ผ๋ก ์ด๊ธฐํ
vector<int> dp(N+1, MAX);
- 3kg์ผ ๋์ 5kg์ผ ๋๋ฅผ ์ ์ฅ
dp[3]=dp[5]=1
- 6๋ถํฐ N๊น์ง ํด๋น ๊ฐ์์ 3kg๋ฅผ ๊ณจ๋์ ๋์ 5kg๋ฅผ ๊ณจ๋์ ๋์ ๊ฐ์ ๋น๊ตํด ์์ ๊ฐ ์ ์ฅํด์ฃผ๊ธฐ
Source Code
#include <iostream>
#include <vector>
using namespace std;
#define MAX 999999
int main() {
int N;
cin >> N;
vector <int> dp(N + 1, MAX);
dp[3] = dp[5] = 1;
for (int i = 6; i <= N; i++) {
dp[i] = min(dp[i - 3] + 1, dp[i - 5] + 1);
}
if (dp[N] >= MAX)cout << "-1";
else cout << dp[N];
return 0;
}