알고리즘/백준

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

코딍코딍 2022. 8. 5. 18:16

https://www.acmicpc.net/problem/2865

 

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

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

www.acmicpc.net

 

 

문제

 

 

코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        int n = Integer.parseInt(st.nextToken()); //참가자수
        int m = Integer.parseInt(st.nextToken()); //능력
        int k = Integer.parseInt(st.nextToken()); //본선 진출자의 수
        double arr[] = new double[n];
        
        for(int i=0;i<m;i++) {
            st = new StringTokenizer(br.readLine()," ");
            for(int j=0;j<n;j++) {
                int num = Integer.parseInt(st.nextToken())-1;
                double value = Double.parseDouble(st.nextToken());
                if(arr[num]<value) arr[num]=value;
            }
        }
        Arrays.sort(arr);
        double sum=0;
        int len = arr.length;
        for(int i=1;i<=k;i++)
            sum+=arr[len-i];
        double result = Math.round(sum*10)/10.; //소수점 첫째자리까지 반올림
        System.out.println(result);
    }

}

 

 

해결방법

참가자마다 최고 점수를 기록해놓고 정렬하여 그 중 점수가 높은 참가자 K명만큼 더한 뒤 소수점 첫째 자리까지 반올림해주면 되는 문제이다.

하지만 "소수점 첫째자리까지 반올림"을 소수점 첫째자리도 반올림해야 하는지 알고 코드를 구현하여 한 번에 통과하지 못하였다.