※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 26975번 문제인 Cow College이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/26975
26975번: Cow College
The first line contains $N$. The second line contains $N$ integers $c_1, c_2, \dots, c_N$, where $c_i$ is the maximum tuition cow $i$ is willing to pay.
www.acmicpc.net
먼저 \(i\)마리의 소가 수업을 들을 때 걷을 수 있는 수업료의 최댓값이 얼마일지 생각해보자. 이 값은 가능한 많은 수업료를 낼 수 있는 \(i\)마리의 소를 골라 그 중 가장 작은 값으로 수업료를 책정해 계산할 수 있을 것이다. 이렇게 소를 고르지 않았다면 위에 해당하지 않는 소를 해당하는 소로 바꿔 수업료를 증가하거나 유지하는 것이 항상 가능하므로 이는 항상 올바른 방법임을 알 수 있다.
수업은 소 0마리, 1마리, ..., \(N\)마리가 듣는 경우로 나눌 수 있으므로 각 \(i\)에 대하여 위의 문제의 답을 구해 그 중 가장 큰 경우를 찾아 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int N;
ll A[100000];
ll ans, anstuit;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 0; i < N; i++) cin >> A[i];
sort(A, A + N, greater());
for (int i = 0; i < N; i++) {
ll val = A[i] * (i + 1);
if (val >= ans) ans = val, anstuit = A[i];
}
cout << ans << ' ' << anstuit;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 28117 // C++] prlong longf (0) | 2024.03.11 |
---|---|
[BOJ 29704 // C++] 벼락치기 (0) | 2024.03.10 |
[BOJ 26596 // C++] 황금 칵테일 (0) | 2024.03.08 |
[BOJ 28446 // C++] 볼링공 찾아주기 (0) | 2024.03.07 |
[BOJ 26267 // C++] 은?행 털!자 1 (0) | 2024.03.06 |