728x90
반응형
![[백준] 8979번: 올림픽 - undefined - 모든 영역 [백준] 8979번: 올림픽 - undefined - 모든 영역](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
![[백준] 8979번: 올림픽 - undefined - 모든 영역 [백준] 8979번: 올림픽 - undefined - 모든 영역](https://blog.kakaocdn.net/dn/dgNV8s/btsEmSPZGBq/Gcb7T4wFG3y4GsMCQckfu0/img.png)
![[백준] 8979번: 올림픽 - undefined - 모든 영역 [백준] 8979번: 올림픽 - undefined - 모든 영역](https://blog.kakaocdn.net/dn/WRsu9/btsEoqSW1vD/fct0ZhNBUz4BJpPl1fMEA0/img.png)
- 문제 유형은 구현, 정렬
- 문제 풀이 방법
- 나라, 금/은/동메달 개수, 순위 등을 저장할 클래스 (Medal)를 생성한다.
이때 동점자를 계산하기 위해 score 변수를 Medal 클래스 내에 정의한다.
금메달은 10점씩 은메달은 5점씩 동메달은 1점씩 부여해 총점을 계산한다. - 우선 금/은/동메달을 기준으로 정렬한다.
- 금메달 수가 더 많은 나라
- 금메달 수가 같으면, 은메달 수가 더 많은 나라
- 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라
- 순위를 계산한다.
- 각 나라의 score를 비교해서 동일한 경우 동점 국가와 동일한 등수가 되고, 그렇지 않다면 (자신보다 더 잘한 나라 수) + 1 이 등수가 된다. - 결과를 알고 싶은 국가의 등수를 출력한다.
- 나라, 금/은/동메달 개수, 순위 등을 저장할 클래스 (Medal)를 생성한다.
package 구현;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class S5_8979 {
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 nation = Integer.parseInt(st.nextToken());
List<Medal> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
list.add(new Medal(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
}
list.sort((o1, o2) -> {
if (o1.getGold() == o2.getGold()) {
if (o1.getSilver() == o2.getSilver()) {
return o2.getBronze() - o1.getBronze();
} else {
return o2.getSilver() - o1.getSilver();
}
}
return o2.getGold() - o1.getGold();
});
list.get(0).setOrder(1);
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (list.get(i).getScore() == list.get(j).getScore()) {
list.get(i).setOrder(list.get(j).getOrder());
} else {
list.get(i).setOrder(i+1);
}
}
}
for (Medal medal : list) {
if (medal.getNation() == nation) {
System.out.println(medal.getOrder());
return;
}
}
}
public static class Medal {
private int nation;
private int gold;
private int silver;
private int bronze;
private int score;
private int order;
public void setOrder(int order) {
this.order = order;
}
public int getOrder() {
return order;
}
public int getScore() {
return this.score;
}
public Medal(int nation, int gold, int silver, int bronze) {
this.nation = nation;
this.gold = gold;
this.silver = silver;
this.bronze = bronze;
this.score = (gold * 10) + (silver * 5) + bronze;
}
public int getNation() {
return nation;
}
public int getGold() {
return gold;
}
public int getSilver() {
return silver;
}
public int getBronze() {
return bronze;
}
}
}
728x90
반응형
댓글