๐Ÿ’ก Algorithm

[DP] Knapsack ์•Œ๊ณ ๋ฆฌ์ฆ˜ - C์–ธ์–ด

jcowwk 2025. 1. 24. 21:16

Knapsack ์•Œ๊ณ ๋ฆฌ์ฆ˜ - C์–ธ์–ด


1. Knapsack ์•Œ๊ณ ๋ฆฌ์ฆ˜

2. ์ฝ”๋“œ ๊ตฌํ˜„

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ํฌ์ŠคํŒ… ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


1. Knapsack ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฐ๋‚ญ ๋ฌธ์ œ(Knapsack Problem)์€ ์ œํ•œ๋œ ์šฉ๋Ÿ‰์„ ๊ฐ€์ง„ ๊ฐ€๋ฐฉ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌผ๊ฑด์„ ๋„ฃ์„ ๋•Œ, ๊ฐ€์น˜์˜ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ์ตœ์ ํ™” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฐฐ๋‚ญ ๋ฌธ์ œ์˜ ์ข…๋ฅ˜์—๋Š” 0/1 ๋ฐฐ๋‚ญ ๋ฌธ์ œ(DP)์™€ ๋ถ„ํ•  ๊ฐ€๋Šฅ ๋ฐฐ๋‚ญ ๋ฌธ์ œ(๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๋‹น ํฌ์ŠคํŒ…์—์„œ๋Š” DP๋ฅผ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

2. ์ฝ”๋“œ ๊ตฌํ˜„

- ์ „์ฒด ์ฝ”๋“œ

#include <stdio.h>
 
int max(int a, int b) {
    return (a > b) ? a : b;
}
 
int knapSack(int W, int wt[], int val[], int n) {
    int i, w;
    int K[n + 1][W + 1];
   
    for (i = 0; i <= n; i++) {
        for (w = 0; w <= W; w++) {
            if (i == 0 || w == 0){
            	K[i][w] = 0;
        	} else if (wt[i - 1] <= w){
                K[i][w] = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]);
        	} else {
                K[i][w] = K[i - 1][w];
        	}
        }
    }
   
    return K[n][W];
}
 
int main() {
    int val[] = {10, 40, 30, 50};
    int wt[] = {5, 4, 6, 3};
    int W = 10;
    int n = 4;
   
    printf("์ตœ๋Œ€ ๊ฐ€์น˜: %d\n", knapSack(W, wt, val, n));
    return 0;
}

 

- DP ํ•ต์‹ฌ ์ฝ”๋“œ ์„ค๋ช…

else if (wt[i - 1] <= w) {
    K[i][w] = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]);
}

 

1. ํ˜„์žฌ ๋ฌผ๊ฑด์„ ๋„ฃ์„ ๊ฒฝ์šฐ val[i-1] + K[i-1][w - wt[i-1]]

ํ˜„์žฌ ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜ val[i-1]๋ฅผ ๋”ํ•œ ํ›„, ๋‚จ์€ ๋ฌด๊ฒŒ w - wt[i-1]์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ฐ€์น˜ K[i-1][w - wt[i-1]]๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค.

 

2. ํ˜„์žฌ ๋ฌผ๊ฑด์„ ๋„ฃ์ง€ ์•Š์„ ๊ฒฝ์šฐ K[i-1][w]

์ด์ „ ์•„์ดํ…œ๊นŒ์ง€ ๊ณ ๋ คํ•œ ์ƒํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

 

3. ์ตœ์ ์˜ ํ•ด ์„ ํƒ

์œ„์˜ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ ์ค‘ ๋” ํฐ ๊ฐ’์„ ์ตœ์ ์˜ ํ•ด๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.


์ฐธ๊ณ  ์‚ฌ์ดํŠธ

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ] ๋ฐฐ๋‚ญ ๋ฌธ์ œ(Knapsack Problem)

Knapsack Problem Knapsack Problem, ๋ฐฐ๋‚ญ๋ฌธ์ œ๋Š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋งค์šฐ ์œ ๋ช…ํ•œ ๋ฌธ์ œ์ด๋‹ค. ์–ด๋–ค ๋ฐฐ๋‚ญ์ด ์žˆ๊ณ  ๊ทธ ๋ฐฐ๋‚ญ์•ˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌด๊ฒŒ๊ฐ€ K๋ผ๊ณ  ํ•˜์ž. ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” N๊ฐœ์˜ ๋ฌผ๊ฑด์ด

jeonyeohun.tistory.com

 

๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !

ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค <3