728x90
1758번: 알바생 강호
첫째 줄에 스타박스 앞에 서 있는 사람의 수 N이 주어진다. N은 100,000보다 작은 자연수이다. 둘째 줄부터 총 N개의 줄에 각 사람이 주려고 하는 팁이 주어진다. 팁은 100,000보다 작거나 같은 자연수
www.acmicpc.net
고객이 기다리는 순번이 하나 증가할수록 주려는 팁에 패널티가 1씩 생길 때(역으로 돈을 갈취하지는 않는다.), 강호가 가장 많이 팁을 벌 수 있도록 하여 고객을 배치할 때 벌어들이는 팁을 구하는 문제이다.
높은 금액의 팁을 주는 고객일수록 적은 패널티를 받게 해야 최적해에 이를 수 있다.
따라서 팁을 많이 주는 순서대로 내림차순 정렬하여 받을 수 있는 팁을 계산하면 최적해를 구할 수 있다.
전체코드
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll res;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n; cin >> n;
vector<int> pay(n);
for (int i = 0; i < n; ++i)
cin >> pay[i];
sort(pay.begin(), pay.end(), greater<int>());
for (int j = 0; j < n; ++j)
res += max(0, pay[j] - j);
cout << res;
}
728x90
'백준 > 그리디' 카테고리의 다른 글
백준 1080 - 행렬 (0) | 2020.06.21 |
---|---|
백준 13458 - 시험 감독 (0) | 2020.06.20 |
[ICPC] 백준 17521 - Byte Coin (0) | 2020.06.05 |
백준 4796 - 캠핑 (0) | 2020.05.30 |
백준 12915 - 대회 개최 (0) | 2020.05.29 |