-
[java] 백준 올림픽알고리즘 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 가 양수 = 내림차순
'알고리즘' 카테고리의 다른 글
[java] 백준 1138 한 줄로 서기 (0) 2023.03.25 [java] 백준 2178 : 미로탐색 (0) 2023.03.25 [java] 백준 2979 트럭주차 (0) 2023.03.23 [java] ArrayList to Array , ArrayList to Array (0) 2023.03.22 [java] 피보나치 수열 (0) 2023.03.22