

https://www.acmicpc.net/problem/8979
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
PriorityQueue<Country> pq = new PriorityQueue<>();
for (int i = 0; i < N; i++) {
pq.add(new Country(br.readLine().split(" ")));
}
Country prev = pq.poll();
if (prev.id == K) {
System.out.println(1);
return;
}
int rank = 2;
int lastRank = 2;
while (!pq.isEmpty()) {
Country cur = pq.poll();
if (!prev.equalTo(cur)) {
lastRank = rank;
}
if (cur.id == K) {
System.out.println(lastRank);
return;
}
rank++;
prev = cur;
}
}
static class Country implements Comparable<Country> {
int id;
int gold;
int silver;
int bronze;
Country(String[] input) {
this.id = Integer.parseInt(input[0]);
this.gold = Integer.parseInt(input[1]);
this.silver = Integer.parseInt(input[2]);
this.bronze = Integer.parseInt(input[3]);
}
@Override
public int compareTo(Country o) {
if (o.gold == this.gold) {
if (o.silver == this.silver) {
return Integer.compare(o.bronze, this.bronze);
}
return Integer.compare(o.silver, this.silver);
}
return Integer.compare(o.gold, this.gold);
}
public boolean equalTo(Country o) {
return this.gold == o.gold && this.silver == o.silver && this.bronze == o.bronze;
}
@Override
public String toString() {
return String.valueOf(id);
}
}
}
CompareTo로 구현한다.priorityQueue에 삽입하고 id가 K인 국가를 뽑을 때까지 반복한다.rank, 가장 최근에 갱신된 등수를 lastRank라고 하자.lastRank는 rank로 갱신된다.lastRank는 갱신되지 않는다. 이를 통해 공동 순위를 구현한다.rank는 항상 증가한다. 따라서 공동순위 뒤에 위치한 국가는 자신에게 맞는 등수를 갖게 된다.