아래 코드로 제출을 했는데
2, 4, 5 번 테스트는 오답이 나옵니다.
뭐가 문제일까요?
?int m[n], p[n]을
n 입력받기전에 선언해서 오류가 생긴거같네요
고치니까 돌아갑니다.
#include <stdio.h>
int main(void)
{
unsigned int w, n, e_price=0;
unsigned int m[n], p[n];
int temp_p,temp_m;
int good[10001] = {0}; //[무게당 가격] good[무게당 가격]
scanf("%d %d", &w, &n );
//입력받고 배열번호를 무게당 가격으로 생각하고 배열값에 금속의 무게를 더해줌, M_i,P_i가 10^4인 것을 이용한 방법
for(int i = 0; i<n; i++){
scanf("%d %d", &m[i], &p[i]);
good[p[i]]=good[p[i]]+m[i];
}
//무게당 가격이 가장 비싼것부터 배낭의 무게와 비교하여 넣을 수 있을만큼 넣음
for(int i = 10000; i>0; i--){
if(good[i]>=w){
e_price = e_price + w*i;
break;
}
else{
e_price = e_price + good[i]*i;
w = w-good[i];
good[i]=0;
}
}
printf("%d",e_price);
/* // 가격기준으로 내림차순으로 정리
for(int i = 0; i<n; i++){
for(int j=i+1; j<n; j++){
if(p[i]<p[j]){
temp_p = p[i];
p[i] = p[j];
p[j] = temp_p;
temp_m = m[i];
m[i] = m[j];
m[j] = temp_m;
}
}
}
// 가장 비싼걸 담을 수 있을 만큼 담고 배낭 무게를 초과하지않게 담아서 가격 저장
for(int i = 0; i<n ; i++){
if(m[i]>=w){
e_price = e_price + w*p[i];
break;
}
else if((w-m[i])<=0){
e_price = e_price + p[i]*w;
break;
}
else if((w-m[i])>0){
e_price = e_price + p[i]*m[i];
w = w-m[i];
}
}
*/ //주석 처리된 코드는 몇몇 테스트 코드에서 런타임 에러가 발생하였음
return 0;