아직 계정이 없으신가요? 회원가입

Dev. Talk

금고털이 질문입니다.(해결)

회원사진bestar
162 views2023-01-01 22:33

아래 코드로 제출을 했는데 

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;