반응형
출처: https://www.acmicpc.net/problem/8979
Input
4 3
1 1 2 0
2 0 1 0
3 0 1 0
4 0 0 1
Output
2
국가별로 금, 은, 동 개수로 올림픽 순위를 구해보려고 합니다.
1. 금메달 수가 더 많은 국가
2. 금메달 수가 같으면 은메달 수가 더 많은 국가
3. 금, 은메달 수가 모두 같으면 동메달 수가 더 많은 국가
(개수가 동일하면 두 나라의 등수는 같습니다.)
* K 국가가 K 번째로 입력되는 것은 아닙니다.
Input
4 2
1 3 0 0
3 0 0 2
4 0 2 0
2 0 2 0
Output
2
① 금, 은, 동 우선순위별로 우선순위 큐에 넣는다.
② 큐에서 poll() 하면서 등수를 매긴다.
(* 공동 순위 주의)
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = Integer.parseInt(sc.next());
int K = Integer.parseInt(sc.next());
PriorityQueue<Country> pq = new PriorityQueue<>();
for(int i=1; i<=N; i++) {
Country country = new Country(
Integer.parseInt(sc.next()), // 번호
Integer.parseInt(sc.next()), // 금
Integer.parseInt(sc.next()), // 은
Integer.parseInt(sc.next()) // 동
);
pq.offer(country);
}
// 1위 국가를 먼저 랭킹처리(시작 순위)
Country preCountry = pq.poll();
preCountry.rank = 1;
if(K == preCountry.id) {
System.out.println(preCountry.rank);
return;
}
int rankCnt = 2;
while(!pq.isEmpty()) {
Country country = pq.poll();
// 등수가 같은지 확인
if(preCountry.gold == country.gold
&& preCountry.silver == country.silver
&& preCountry.bronze == country.bronze) {
country.rank = preCountry.rank;
}
else {
country.rank = rankCnt;
}
if(country.id == K) {
System.out.println(country.rank);
return;
}
preCountry = country;
rankCnt++;
}
}
}
class Country implements Comparable<Country> {
int id, gold, silver, bronze, rank;
public Country(int id, int gold, int silver, int bronze) {
this.id = id;
this.gold = gold;
this.silver = silver;
this.bronze = bronze;
}
@Override
public int compareTo(Country target) {
// 높은 숫자가 위로 오도록
if (this.gold > target.gold)
return -1;
else if (this.gold < target.gold)
return 1;
else {
// 은메달 비교
if(this.silver > target.silver) {
return -1;
}
else if(this.silver < target.silver) {
return 1;
}
else {
// 동메달 비교
if(this.bronze > target.bronze) {
return -1;
}
else if(this.bronze < target.bronze) {
return 1;
}
return 1;
}
}
}
@Override
public String toString() {
return "[" + id + "] (" + gold + ", " + silver + ", " + bronze + ")";
}
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 7569 토마토 (0) | 2021.02.22 |
---|---|
[BOJ] 백준 7576 토마토 (0) | 2021.02.22 |
[BOJ] 백준 3425 고스택 (0) | 2021.02.22 |
[BOJ] 백준 2563 색종이 (0) | 2021.02.22 |
[BOJ] 백준 17825 주사위 윷놀이 (0) | 2021.02.22 |
댓글