[9급 국가직 알고리즘 2026년 12번]

다음 표와 같이 분말이 있을 때, 40 kg 무게까지 허용가능한 배낭에 최대 이익을 얻을 수 있도록 분말을 넣는 알고리즘의 C 프로그램이 아래와 같다. (가), (나)에 들어갈 코드와 출력값을 바르게 연결한 것은? (단, 배낭에 각 분말 일부만 넣을 수도 있다)
분말 종류
보유량(kg)
이익
A
10
60
B
18
90
C
25
100
D
15
120
#include <stdio.h>

int main() {
    double wgt[] = {10, 18, 25, 15};
    double val[] = {60, 90, 100, 120};
    double ratio[4] = {}, W = 40, max_r, 
            totalVal = 0.0;
    int i, max_i;
    
    for (i = 0; i < 4; i++) 
        ratio[i] = (가);
    while (W > 0) {
        max_r = -1.0; 
        max_i = -1;
        
        for (i = 0; i < 4; i++) {
            if (wgt[i] > 0 && ratio[i] > max_r) {
                max_r = ratio[i];
                max_i = i;
            }
        }
        if (max_i == -1) break;
        if (W >= wgt[max_i]) {
            W -= wgt[max_i];
            totalVal += val[max_i];
        } 
        else {
            totalVal += val[max_i] * (나);
            break;
        }        
        wgt[max_i] = 0;
    }
    printf("%.1f\n", totalVal);
    return 0;
}
(가) (나) 출력값
알고리즘
  1. val[i] / wgt[i] W / wgt[max_i] 255.0
  2. val[i] / wgt[i] wgt[max_i] / W 255.0
  3. val[i] / wgt[i] W / wgt[max_i] 220.0
  4. wgt[i] / val[i] W / wgt[max_i] 220.0
정답 ①

출처: 인사혁신처 공개 기출(공공데이터포털, 이용허락 제한 없음)