본문 바로가기

알고리즘

[C/C++] 코드업(codeup) 3321번 최고의 피자

▽문제 바로가기

https://codeup.kr/problem.php?id=3321

 

최고의 피자

첫 번째 줄에는 토핑 종류 수를 나타내는 하나의 정수 N (1 ≦ N ≦ 100)이 입력된다. 두 번째 줄에는 두 개의 정수 A, B (1 ≦ A ≦ 1000,1 ≦ B ≦ 1000)가 공백을 구분으로 입력된다. A는 도우의 가격, B는 토핑의 가격을 나타낸다. 세 번째 줄에는 도우의 칼로리를 나타내는 정수 C (1 ≦ C ≦ 10000)가 입력된다. 3 + i 행 (1 ≦ i ≦ N)는 i 번째의 토핑 칼로리 수를 나타내는 정수 Di (1 ≦ Di ≦

codeup.kr


입력

첫 번째 줄에는 토핑 종류 수를 나타내는 하나의 정수 N (1 ≦ N ≦ 100)이 입력된다.

두 번째 줄에는 두 개의 정수 A, B (1 ≦ A ≦ 1000,1 ≦ B ≦ 1000)가 공백을 구분으로 입력된다. A는 도우의 가격, B는 토핑의 가격을 나타낸다.

세 번째 줄에는 도우의 칼로리를 나타내는 정수 C (1 ≦ C ≦ 10000)가 입력된다.

3 + i 행 (1 ≦ i ≦ N)는 i 번째의 토핑 칼로리 수를 나타내는 정수 Di (1 ≦ Di ≦ 10,000)가 입력된다.

 

출력

"최고의 피자" 1 달러 당 열량의 수를 소수점 이하는 버리고 정수로 출력한다.

 

정수로 출력해라고 되어있으므로 중간 계산역시 편하게 정수형으로 통일했습니다. 계산과정의 소수점 이하를 모두 버렸습니다.

 

계산 과정은 간단합니다.

 

1. 도우는 필수입니다.

2. 토핑을 정렬합니다.

3. 현재까지 1달러당 열량 vs (열량이 가장 큰 토핑 순으로) 토핑의 1달러당 열량을 비교하여 토핑의 1달러당 열량이 크다면 토핑을 주문합니다.

 

 

문제 풀이

 

#include <stdio.h>
#include <algorithm>

using namespace std;

int main(){
	
	int n;
	scanf("%d", &n);
	
	int a, b;	//도우 가격, 토핑 가격 
	scanf("%d%d", &a, &b);
	
	int d_cal;	//도우 열량 
	scanf("%d", &d_cal); 
	
	int t_cal[n];	//토핑 열량 
	for(int i=0;i<n;i++) scanf("%d", &t_cal[i]); 
	
	int cal = d_cal;	//총 열량
	int price = a;	//총 가격 
	int ret = cal/price;	//1달러당 열량
	
	sort(t_cal, t_cal+n);	//토핑 열량별로 정렬 
	
	for(int i=n-1;i>=0;i--){
		if(ret<(t_cal[i]/b)){	//지금까지 1달러당 열량 vs 토핑의 1달러당 열량
			price += b;
			cal += t_cal[i];
			ret = cal/price;
		}
		else break;
	}
	
	printf("%d", ret);
	
}