문제링크 : https://www.acmicpc.net/problem/1758
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = INT_MAX;
int N, arr[100001];
ll result = 0;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for(int i=1; i<=N; i++) cin >> arr[i];
sort(arr+1, arr+N+1, greater<>());
for(int i=1; i<=N; i++)
{
if(arr[i]-(i-1) < 0) continue; //음수 스킵
result += (arr[i]-(i-1));
}
cout << result;
return 0;
}
값이 최대가 되도록 하기 위해 우선 입력받은 값에 대해 내림차순 정렬을 해준다.
이후 기존 팁 금액에 등수차 금액을 빼고, 해당 값이 음수면 스킵한다.
양수면 무사히 팁을 받았기에 해당 팁을 저장하고 출력해준다.
배열의 최대 값이 10만이고, N의 범위도 10만이기에 합하는 과정에서 int 범위를 넘길 수 있으므로 long long으로 선언해주어야 한다.
'백준 > 실버' 카테고리의 다른 글
[백준 17271번] 리그 오브 레전설 (Small) (C++) (0) | 2024.04.26 |
---|---|
[백준 10431번] 줄세우기 (C++) (0) | 2024.04.12 |
[백준 11508번] 2+1 세일 (C++) (0) | 2024.04.08 |
[백준 1448번] 삼각형 만들기 (C++) (0) | 2024.04.07 |
[백준 20291번] 파일 정리 (C++) (0) | 2024.04.06 |