관리 메뉴

풀이 보관함

[C++] 백준 2865번: 나는 위대한 슈퍼스타K (소수점 출력 방법) 본문

problem solving/백준

[C++] 백준 2865번: 나는 위대한 슈퍼스타K (소수점 출력 방법)

viin 2022. 10. 27. 18:23

🔗 문제

2865번: 나는 위대한 슈퍼스타K

 

2865번: 나는 위대한 슈퍼스타K

첫째 줄에 N, M, K가 주어진다. (1 ≤ M ≤ 100, 1 ≤ K ≤ N ≤ 100) 다음 M개의 줄은 각 장르에 대한 참가자의 능력이 주어진다. 이 줄에는 N개의 (i, s)쌍이 주어진다. 여기서 i는 참가자의 번호, s는 그

www.acmicpc.net

 

+tmi

요즘 예~~전에 잘 못풀었던 문제들을 다시 보고 있다. 

카카오 서버 다운된 이후로 티스토리를 접으려고 했는데

이 문제 쉽게 풀 수 있는데 유독 복잡한 풀이가 많은 것 같아서 올려봤다...

 

 

 

🖍 풀이

 

참가자는 여러 장르로 본선에 갈 수 없으므로 참가자의 가장 큰 점수만 저장하면 된다. 

 

  1. 각 참가자의 최대 점수를 저장
  2. 내림차순 정렬
  3. 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;
}