본문 바로가기
알고리즘 & 자료구조/백준

백준 2865

by 신재권 2022. 1. 3.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main2865 {

	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()); //참가자 수 N
		int M = Integer.parseInt(st.nextToken()); //장르개수 M
		int K = Integer.parseInt(st.nextToken()); //본선 진출자 수 K
		
		//1. 한 사람이 여러 장르를 부를 수는 없지만, 여러 사람이 같은 장르를 부를 수는 있다.
		//-> 한 장르에서 한 명이상의 본선 진출자가 나온다 
		//2. 능력 점수로 정렬 
		//3. 본선 진출 참가자가 아니면 차례로 능력점수를 합한다. 
		
		ArrayList<Pair> p = new ArrayList<>();
		
		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());
				float ability = Float.parseFloat(st.nextToken());
				p.add(new Pair(num, ability));
			}
		}
		
		// 오름차순 정렬 
		// 1 > 2 -> 양수 반환
		// 1 < 2 -> 음수 반환
		// 1 == 3 -> 0 리턴 
		
		//내림차순 정렬 
		// 2 > 1 -> 양수 반환
		// 2 < 1 -> 음수 반환 
		
		Collections.sort(p, new Comparator<Pair>() { // 능력점수 기준으로 리스트 정렬 
			@Override
			public int compare(Pair o1, Pair o2) {
				return Float.compare(o2.ability, o1.ability); //내림차순으로 정렬하기위해 앞뒤값을 반대로 바꿔줌 
			}
		});
		
		ArrayList<Integer> finallist = new ArrayList<>();
		float answer = 0.0f;
		for(Pair pair : p) {
			if(finallist.size() >= K) break;
			if(!finallist.contains(pair.num)) { //본선 참가자가 아니라면 
				answer += pair.ability; //답을 더해주고 
				finallist.add(pair.num); // 본선 참가자에 넣어준다.
			}else {
				continue;
			}
			
		}
		System.out.printf("%.1f\n", answer);

	}
	
	static class Pair{
		int num;
		float ability;
		
		public Pair(int num, float ability) {
			this.num = num;
			this.ability = ability;
		}
	}
	
}

'알고리즘 & 자료구조 > 백준' 카테고리의 다른 글

백준 19539  (0) 2022.01.05
백준 2872  (0) 2022.01.04
백준 18238  (0) 2022.01.02
백준 17615  (0) 2022.01.01
백준 14754  (0) 2021.12.31