๐ฉ ๋งค ์๊ฐ์์ ์ง๊ธ ์ด ์๊ฐ ๋น์ฅ ์ต์ ์ ๋ต์ ์ ํํด ์ ํฉํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ์!
= ๊ฐ๋จํ๋ฉด์ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋ค ์ ์๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฒ
์ต์๊ฐ/์ต๋๊ฐ์ ๊ตฌํ๋ ์ต์ ํ ๋ฌธ์ ์ ์ฃผ๋ก ์ฌ์ฉ
๊ฐ ๋จ๊ณ๋ง๋ค ์ ์ฑ ํ ์ต์ ์ ํด๊ฐ ์ ์ฒด์ ์ธ ์ต์ ์ ํด๊ฐ ๋์ง ์์ ์ ์๋ค!
๐ ํ์ฉ1 ๊ฑฐ์ค๋ฆ๋ ๋ฌธ์ , ๋ฐฐ๋ญ ๋ฌธ์
๋ฐฐ๋ญ ๋ฌธ์
#include <stdio.h>
// ๋ฐฐ๋ญ์ ์ต๋ ๋ฌด๊ฒ
#define KNAP_MAX 6
// ๋ฌผ๊ฑด์ ์ข
๋ฅ
#define ITEM_NUM 5
// ๋ฌผ๊ฑด์ ๋ช
์นญ
char name[] = { 'A', 'B', 'C', 'D', 'E' };
// ๋ฌผ๊ฑด์ ๋ฌด๊ฒ
int weight[] = { 1, 2, 3, 4, 5 };
// ๋ฌผ๊ฑด์ ๊ฐ์น
int value[] = { 100, 300, 350, 500, 650 };
// ๋ฌผ๊ฑด์ ๋ฃ์์ง ํ๋จํ ์งํ์ ์ต๋ ๊ฐ์น
int maxValue[ITEM_NUM][KNAP_MAX + 1];
// ๋ง์ง๋ง์ ๋ฃ์ ๋ฌผ๊ฑด
int lastItem[KNAP_MAX + 1];
// item๋ฒ์งธ ๋ฌผ๊ฑด์ ๋ฃ์์ง ํ๋จํ ์งํ ๋ฐฐ๋ญ์ ๋ด์ฉ์ ํ์ํ๋ ํจ์
void showKnap(int item) {
int knap; // 0~6kg์ ๋ฐฐ๋ญ์ ๊ฐ๋ฆฌํด
// ๋ฃ์์ง ๋ง์ง ํ๋จํ ๋ฌผ๊ฑด์ ์ ๋ณด๋ฅผ ํ์
printf("<%c, %dkg, %d์์ ๊ณ ๋ คํ ๊ฒฐ๊ณผ>\n", name[item], weight[item], value[item]);
// ๊ฐ ๋ฐฐ๋ญ์ ๋ฌด๊ฒ๋ฅผ ํ์
for (knap = 0; knap <= KNAP_MAX; knap++) {
printf("%dkg\t", knap);
}
printf("\n");
// ๋ฐฐ๋ญ์ ๋ด๊ธด ์ํ ๊ฐ์น์ ํฉ๊ณ๋ฅผ ํ์
for (knap = 0; knap <= KNAP_MAX; knap++) {
printf("%d์\t", maxValue[item][knap]);
}
printf("\n");
// ๋ฐฐ๋ญ์ ๋ง์ง๋ง์ผ๋ก ๋ฃ์ ๋ฌผ๊ฑด์ ํ์
for (knap = 0; knap <= KNAP_MAX; knap++) {
if (lastItem[knap] != -1) {
printf("%c\t", name[lastItem[knap]]);
}
else {
printf("์์\t");
}
}
printf("\n\n");
}
// ํ๋ก๊ทธ๋จ ์คํ์ ์์์ ์ธ main ํจ์
int main() {
int item; // ๋ฌผ๊ฑด ๋ฒํธ
int knap; // 0~6kg์ ๋ฐฐ๋ญ์ ๊ฐ๋ฆฌํด
int selVal; // ์์๋ก ๋ฌผ๊ฑด์ ์ ํํ ๊ฒฝ์ฐ์ ๊ฐ์น ํฉ๊ณ
int totalWeight; // ์ค๋์ ํฉ๊ณ
// 0๋ฒ์งธ ๋ฌผ๊ฑด์ ๋ฃ์์ง ํ๋จ
item = 0;
// 0~KNAP_MAX kg์ ๋ฐฐ๋ญ์ ๊ณ ๋ ค
for (knap = 0; knap <= KNAP_MAX; knap++) {
// ์ต๋ ๋ฌด๊ฒ ์ดํ๋ฉด ์ ํ
if (weight[item] <= knap) {
maxValue[item][knap] = value[item];
lastItem[knap] = item;
}
// ์ต๋ ๋ฌด๊ฒ ์ดํ๊ฐ ์๋๋ฉด ์ ํํ์ง ์์
else {
maxValue[0][knap] = 0;
lastItem[knap] = -1;
}
}
showKnap(item);
// 1๋ฒ์งธ~ITEM_NUM - 1๋ฒ์งธ ๋ฌผ๊ฑด์ ๊ณ ๋ ค
for (item = 1; item < ITEM_NUM; item++) {
// 0~KNAP_MAX kg์ ๋ฐฐ๋ญ์ ๊ณ ๋ ค
for (knap = 0; knap <= KNAP_MAX; knap++) {
// ์ต๋ ๋ฌด๊ฒ ์ดํ์ ๊ฒฝ์ฐ
if (weight[item] <= knap) {
// ์ ํํ ๊ฒฝ์ฐ์ ๊ฐ์น๋ฅผ ๊ตฌํจ
selVal = maxValue[item - 1][knap - weight[item]] + value[item];
// ๊ฐ์น๊ฐ ํฌ๋ฉด ์ ํ
if (selVal > maxValue[item - 1][knap]) {
maxValue[item][knap] = selVal;
lastItem[knap] = item;
}
// ๊ฐ์น๊ฐ ํฌ์ง ์์ผ๋ฉด ์ ํํ์ง ์์
else {
maxValue[item][knap] = maxValue[item - 1][knap];
}
}
// ์ต๋ ๋ฌด๊ฒ ์ดํ๊ฐ ์๋๋ฉด ์ ํํ์ง ์์
else {
maxValue[item][knap] = maxValue[item - 1][knap];
}
}
showKnap(item);
}
// ๋ฐฐ๋ญ์ ๋ค์ด ์๋ ๋ฌผ๊ฑด์ ์กฐ์ฌํ์ฌ ์ ๋ต์ ํ์
printf("<๋ฐฐ๋ญ์ ๋ค์ด ์๋ ๋ฌผ๊ฑด์ ์กฐ์ฌ>\n");
totalWeight = 0;
for (knap = KNAP_MAX; knap > 0; knap -= weight[item]) {
item = lastItem[knap];
printf("%dkg์ ๋ฐฐ๋ญ์ ๋ง์ง๋ง์ผ๋ก ๋ฃ์ ๋ฌผ๊ฑด์ %c์
๋๋ค.\n", knap, name[item]);
totalWeight += weight[item];
printf(" %c, %dkg, %d์\n", name[item], weight[item], value[item]);
printf(" %dkg - %dkg = %dkg์
๋๋ค.\n", knap, weight[item], knap - weight[item]);
}
printf("\n<์ ๋ต์ ํ์>\n");
printf("๋ฌด๊ฒ์ ํฉ๊ณ = %dkg\n", totalWeight);
printf("๊ฐ์น์ ์ต๋๊ฐ = %d์\n", maxValue[ITEM_NUM - 1][KNAP_MAX]);
return 0;
}
๋ฐฐ๋ญ๋ฌธ์ ๋ฅผ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ๊ธฐ
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ : ๊ฐ์น๊ฐ ํฐ ๊ฒ๋ถํฐ ์ฐจ๋ก๋ก ๋ฌผ๊ฑด์ ๊ณ ๋ฅธ๋ค.
#include <stdio.h>
#define KNAP_MAX 6 // ๋ฐฐ๋ญ์ ์ต๋ ๋ฌด๊ฒ
#define ITEM_NUM 5 // ๋ฌผ๊ฑด์ ์ข
๋ฅ
int main() {
int totalWeight = 0; // ๋ฌด๊ฒ์ ํฉ๊ณ
int totalValue = 0; // ๊ฐ์น์ ํฉ๊ณ
// ๋ฌผ๊ฑด์ ์ ๋ณด(๊ฐ์น๊ฐ ํฐ ์์๋ก ์ ๋ ฌ)
char name[] = { 'E', 'D', 'C', 'B', 'A' };
int weight[] = { 5, 4, 3, 2, 1 };
int value[] = { 650, 500, 350, 300, 100 };
// ๊ฐ์น๊ฐ ํฐ ์์๋ก ๊ณ ๋ฅด๊ธฐ
for (int i = 0; i < ITEM_NUM; i++) {
if (totalWeight + weight[i] <= KNAP_MAX) {
printf("๋ฌผ๊ฑด %c๋ฅผ ์ ํ\n", name[i]);
totalWeight += weight[i];
totalValue += value[i];
}
else {
break;
}
}
// ๊ฒฐ๊ณผ๋ฅผ ํ์
printf("๋ฌด๊ฒ์ ํฉ๊ณ = %dkg\n", totalWeight);
printf("๊ฐ์น์ ํฉ๊ณ = %d์\n", totalValue);
return 0;
}
๐ ํ์ฉ2 ๊ทธ๋ํ
2-1. ์ต์ ์ ์ฅ ํธ๋ฆฌ ๐ ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ, ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ
2-2. ๋จ์ผ ์ถ๋ฐ์ ์ต๋จ ๊ฒฝ๋ก ๐ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ
'๐ฉโ๐ป ํ๋ก๊ทธ๋๋ฐ > ๐ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋์ ๊ณํ๋ฒ(dynamic programming) feat. ํผ๋ณด๋์น ์์ด (0) | 2024.03.27 |
---|---|
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ (0) | 2024.03.27 |
์ ํ ๊ฒ์ (๋ณด์ด๋ฒ) (0) | 2024.01.06 |
ํ๋ ธ์ด์ ํ (0) | 2024.01.06 |
์์ ํ๋ณ๋ฒ(ํ๋ฅด๋ง ํ ์คํธ) (1) | 2024.01.06 |