전공공부
[BOJ 8979] 올림픽 본문
금메달 은메달 동메달 순서로 순위를 매기는데 이때 같은 점수가 나오면
1등 2등 2등 4등 이런식으로 점수가 매겨짐
따라서... Set으로 지우는 방식으로 진행하면 안되고 중복된 등수가 나오더라도 중복된 등수 만큼 살려두고 후의 등수를 매겨놔야 정확한 답을 얻을 수 있음.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class BOJ_8979_올림픽 {
static class Medal implements Comparable<Medal>{
int idx;
int g;
int s;
int d;
public Medal (int idx, int g, int s, int d){
this.idx = idx;
this.g = g;
this.s = s;
this.d = d;
}
@Override
public int compareTo(Medal o) {
if(this.g==o.g) {
if(this.s==o.s) {
return o.d-this.d;
}
else {
return o.s-this.s;
}
}
else {
return o.g-this.g;
}
}
}
public static void main(String[] args) throws Exception{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer tk = new StringTokenizer(in.readLine(), " ");
int N = Integer.parseInt(tk.nextToken());
int K = Integer.parseInt(tk.nextToken());
int arr[];
List<Medal> list = new ArrayList<Medal>();
int ans = 0;
int kg = 0;
int ks = 0;
int kd = 0;
for(int i = 0; i < N; i++){
tk = new StringTokenizer(in.readLine(), " ");
arr = new int[4];
for(int j = 0; j < 4; j++){
arr[j] = Integer.parseInt(tk.nextToken());
}
Medal medal = new Medal(arr[0], arr[1], arr[2], arr[3]);
if(arr[0] == K){
kg = arr[1];
ks = arr[2];
kd = arr[3];
}
list.add(medal);
}
Collections.sort(list);
for(int i = 0; i < list.size(); i++){
if(list.get(i).g == kg && list.get(i).s == ks && list.get(i).d == kd){
ans = i+1;
break;
}
}
System.out.println(ans);
}
}
8979번: 올림픽
입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각
www.acmicpc.net
'Study > Problem Solving' 카테고리의 다른 글
[BOJ 11286] 절대값 힙 (0) | 2023.08.13 |
---|---|
[BOJ 2606] 바이러스 (0) | 2023.08.12 |
[BOJ 10431] 줄 세우기 (0) | 2023.07.30 |
[BOJ 9655] 돌 게임 (0) | 2023.07.26 |
[BOJ 11723] 집합 (0) | 2023.07.26 |