import java.util.*;
import java.io.*;
public class Main {
static class Info implements Comparable<Info> {
int w, v;
Info(int w, int v) {
this.w = w;
this.v = v;
}
@Override
public int compareTo(Info info) {
double x = (double) info.v / info.w - (double) this.v / this.w;
if (x < 0) { // info의 가치/무게 값이 더 작으면 -1반환 / 순서유지
return -1;
} else if (x == 0) { // 가치/무게 값이 동일하면 0 반환
return 0;
} else { // info의 가치/무게값이 더 크면 1반환 / 순서 변경
return 1;
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(stk.nextToken());
int m = Integer.parseInt(stk.nextToken());
ArrayList<Info> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
stk = new StringTokenizer(br.readLine(), " ");
int w = Integer.parseInt(stk.nextToken());
int v = Integer.parseInt(stk.nextToken());
list.add(new Info(w, v));
}
Collections.sort(list);
double ans = 0;
for (int i = 0; i < list.size(); i++) {
int w = list.get(i).w;
int v = list.get(i).v;
if (m >= w) {
m -= w;
ans += v;
} else {
ans += (double) m / w * v;
break;
}
}
System.out.printf("%.3f", ans);
}
}
정렬을 할 때 return this.w - info.w; 와 같은 방식만 사용해오다가 이런 방식으로 정렬을 구현하니 어려움을 겪었다. 더 노력해야겠다.