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
는 항상 증가한다. 따라서 공동순위 뒤에 위치한 국가는 자신에게 맞는 등수를 갖게 된다.