https://www.acmicpc.net/problem/8979
📝문제
📝풀이
주어진 메달의 갯수로 어떤 나라가 몇등 했는지 구하는 문제이다
Medal 클래스를 만들고 비교연산을 위해 Comparable 인터페이스를 implements 한다.
비교순위를 보장해주는 TreeMap <메달,나라들> 컬렉션을 사용하여 똑같은 점수가 있을 경우
해당 점수의 value 를 List 안에 추가하는 방식으로 입력을 받는다
그런 다음 TreeMap을 순회하면서 구할 나라의 등수를 계산
import static java.util.Arrays.*;
import static java.util.stream.Collectors.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] input = stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt).toArray();
int n = input[0]; // 나라 크기
int query = input[1]; // 등수를 구할 나라
// 정렬 기준 : 점수 내림차순 (key)
TreeMap<Medal, ArrayList<Integer>> ranking = new TreeMap<>();
for(int i=0;i<n;i++){
int[] info = stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt).toArray();
Medal score = new Medal(info[1],info[2],info[3]);
if(ranking.containsKey(score)){ // 해당 금,은,동 점수의 국가가 또 존재할 경우 추가
ranking.get(score).add(info[0]);
}else{
ArrayList<Integer> nations = new ArrayList<>(); // 특정 금,은,동 스코어가 처음 나오면 Map에 추가
nations.add(info[0]);
ranking.put(score,nations);
}
}
int ans=0; // 등수
for (var entry : ranking.entrySet()) {
ArrayList<Integer> nations = entry.getValue();
if(nations.contains(query)){ // entry 를 탐색하던 도중 구하고 싶은 나라가 포함되어 있으면 등수 +1 하고 출력
System.out.println(ans+1);
break;
}else ans+=nations.size(); // 나라들이 포함되어 있는 리스트 사이즈 만큼 등수 추가
}
}
static class Medal implements Comparable<Medal>{
int gold,silver,bronze;
public Medal(int gold, int silver, int bronze) {
this.gold = gold;
this.silver = silver;
this.bronze = bronze;
}
@Override
public int compareTo(Medal o) {
if(o.gold == this.gold){
if(o.silver==this.silver)
return o.bronze-this.bronze;
return o.silver-this.silver;
}
return o.gold-this.gold;
}
}
}
'알고리즘,PS > 백준' 카테고리의 다른 글
[BOJ] 백준 [1445] 일요일 아침의 데이트 JAVA (0) | 2022.04.08 |
---|---|
[BOJ] 백준 [2980] 도로와 신호등 JAVA (0) | 2022.04.08 |
[BOJ] 백준 [13460] 구슬탈출2 JAVA (0) | 2022.04.07 |
[BOJ] 백준 [18405] 경쟁적 전염 JAVA (0) | 2022.04.05 |
[BOJ] 백준 [1865] 웜홀 JAVA (0) | 2022.04.04 |