https://www.acmicpc.net/problem/8979
compareTo
함수를 작성할 때 여러 개의 if-else문을 사용하였다.Nation[]
배열을 사용하여 Arrays.sort()
로 정렬하려고 했다.Nation
클래스에서 멤버 변수를 private로 제한하였다.Nation
클래스에서 번호를 저장할 필요성을 느끼지 못했지만, 이후 num
멤버변수를 추가했다.return o.gold - this.gold;
와 같이 작성하자.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
static class Nation implements Comparable<Nation> {
int num, gold, silver, bronze;
public Nation(int num, int gold, int silver, int bronze) {
this.num = num;
this.gold = gold;
this.silver = silver;
this.bronze = bronze;
}
@Override
public int compareTo(Nation o) {
if (this.gold == o.gold) {
if (this.silver == o.silver) {
return o.bronze - this.bronze;
}
else return o.silver - this.silver;
}
else
return o.gold - this.gold;
}
}
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 t = Integer.parseInt(st.nextToken());
ArrayList<Nation> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
StringTokenizer tmp = new StringTokenizer(br.readLine());
int num = Integer.parseInt(tmp.nextToken());
int gold = Integer.parseInt(tmp.nextToken());
int silver = Integer.parseInt(tmp.nextToken());
int bronze = Integer.parseInt(tmp.nextToken());
Nation nation = new Nation(num, gold, silver, bronze);
list.add(nation);
}
Collections.sort(list);
int rate = 1;
int cnt = 1;
if (list.get(0).num == t) {
System.out.println(1);
return;
}
for (int i = 1; i < n; i++) {
Nation prev = list.get(i-1);
Nation cur = list.get(i);
if ((prev.gold != cur.gold) || (prev.silver != cur.silver) || (prev.bronze != cur.bronze)) {
rate += cnt;
cnt = 1;
}
else
cnt++;
if (cur.num == t) {
System.out.println(rate);
break;
}
}
}
}