※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 5545번 문제인 최고의 피자이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/5545 

 

5545번: 최고의 피자

상근이는 근처 피자 가게에서 매일 저녁으로 피자를 배달해 먹는다. 주머니 사정이 얇아진 상근이는 이번 달부터는 "최고의 피자"를 구매하려고 한다. 최고의 피자란, 피자 가게에서 주문할 수

www.acmicpc.net

모든 토핑의 가격은 동일하므로, 기본 도우 위에 열량이 높은 토핑부터 차례대로 올려보면서 최고의 피자를 만들어보자.

 

(현재 피자 열량)/(현재 피자 가격) 보다 (토핑의 열량)/(토핑의 가격)이 더 크다면 이 토핑을 올렸을 때 피자의 (열량)/(가격)이 오른다는 점을 이용해 그리디한 접근으로 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;

ll cal[1000];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N; cin >> N;
	ll totalprice, totalcal, price; cin >> totalprice >> price >> totalcal;
	for (int i = 0; i < N; i++) cin >> cal[i];
	
	sort(cal, cal + N);

	for (int i = N - 1; i > -1; i--) {
		if (cal[i] * totalprice > totalcal * price) totalprice += price, totalcal += cal[i];
		else break;
	}

	cout << totalcal / totalprice;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 5547 // C++] 일루미네이션  (0) 2022.06.05
[BOJ 4351 // C++] Hay Points  (0) 2022.06.05
[BOJ 18511 // C++] 큰 수 구성하기  (0) 2022.06.05
[BOJ 5546 // C++] 파스타  (0) 2022.06.05
[BOJ 24929 // C++] Number Colosseum  (0) 2022.06.05

+ Recent posts