알고리즘
[java] 백준 올림픽
_DAMI
2023. 3. 24. 00:05
package main;
import java.util.*;
class medal implements Comparable<medal>{
int num,gold,sliver,bronze,rank;
public medal(int num,int gold,int sliver,int bronze,int rank) {
this.num=num;
this.gold=gold;
this.sliver=sliver;
this.bronze=bronze;
this.rank=rank;
}
@Override
public int compareTo(medal o) {
if(this.gold==o.gold) {
if(this.sliver==o.sliver) {
return o.bronze - this.bronze ;
}else {
return o.sliver - this.sliver;}
}else {
return o.gold - this.gold;}
}
}
public class Main {
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int n=sc.nextInt(); //나라수
int k=sc.nextInt(); // 알고 싶은 국가번호
medal[] arr = new medal[n];
for(int i=0; i<n;i++) {
int a=sc.nextInt();
int b=sc.nextInt();
int c=sc.nextInt();
int d=sc.nextInt();
arr[i] = new medal(a,b,c,d,1);
}
Arrays.sort(arr); //순서대로 정렬시켜준다.
int cnt=1; //공통의 수세기
for(int i=1; i<n;i++) {
if((arr[i].gold == arr[i-1].gold)&&(arr[i].sliver == arr[i-1].sliver)&&
(arr[i].bronze == arr[i-1].bronze)) {
arr[i].rank= arr[i-1].rank;
cnt++;
}else {
arr[i].rank= arr[i-1].rank+cnt;
cnt=1;
}
}
for(int i=0; i<n;i++) {
//System.out.println(arr[i].num+ " "+ arr[i].rank);
if(arr[i].num==k) { System.out.println(arr[i].rank); }
}
}
}
금,은,동에 따라 정렬해준다
금은동이 같으면 같은 등수를 매겨야 하니까 그전의 랭킹과 같은 등수를 넣고 cnt증가 (cnt는 공통인게 몇개인지 센다)
금은동이 같지 않다면 같은 등수였던 개수만큼 이전랭킹에 더해주고 cnt를 1로 초기화해줘야 다음번에도 셀 수 있음
@Override
public int compareTo(medal o) {
if(this.gold==o.gold) {
if(this.sliver==o.sliver) {
return o.bronze - this.bronze ;
}else {
return o.sliver - this.sliver;}
}else {
return o.gold - this.gold;}
}
gold가 같다면 slive비교 sliver가 같다면 bronze가 많은걸로 정렬시킨다. o.bronze - this.bronze 가 양수 = 내림차순