알고리즘/백준
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명만큼 더한 뒤 소수점 첫째 자리까지 반올림해주면 되는 문제이다.
하지만 "소수점 첫째자리까지 반올림"을 소수점 첫째자리도 반올림해야 하는지 알고 코드를 구현하여 한 번에 통과하지 못하였다.