🔗 문제
2865번: 나는 위대한 슈퍼스타K
첫째 줄에 N, M, K가 주어진다. (1 ≤ M ≤ 100, 1 ≤ K ≤ N ≤ 100) 다음 M개의 줄은 각 장르에 대한 참가자의 능력이 주어진다. 이 줄에는 N개의 (i, s)쌍이 주어진다. 여기서 i는 참가자의 번호, s는 그
www.acmicpc.net
+tmi
요즘 예~~전에 잘 못풀었던 문제들을 다시 보고 있다.
카카오 서버 다운된 이후로 티스토리를 접으려고 했는데
이 문제 쉽게 풀 수 있는데 유독 복잡한 풀이가 많은 것 같아서 올려봤다...
🖍 풀이
참가자는 여러 장르로 본선에 갈 수 없으므로 참가자의 가장 큰 점수만 저장하면 된다.
- 각 참가자의 최대 점수를 저장
- 내림차순 정렬
- K명의 점수 합산
✔️ 소수점 출력 방법
precision은 소수점을 자를 때 올림하는 것에 유의해야 한다.
printf("%1f", answer);
std::cout << std::fixed
std::cout.precision(1); // 소수점 1자리까지 출력
std::cout << answer;
💾 소스
#include <iostream>
#include <algorithm>
int main()
{
int N, M, K;
double contestants[101] = {0.0, };
int num;
double score
std::cin >> N >> M >> K;
for(int i=0; i<N; ++i)
{
for(int j=0; j<M; ++j)
{
std::cin >> num >> score;
if(contestants[num] < score)
contestants[num] = score;
}
}
std::sort(contestants, contestants+N+1, std::greater<>());
double answer = 0;
for(int i=0; i<K; ++i)
answer += contestants[i];
printf("%.1lf", answer);
return 0;
}