카테고리 없음
8979 올림픽 (백준)
rectified
2025. 2. 26. 15:51
뭔 생각이 부족해서 못 풀었나
struct 까지는 생각 잘했고 compare 함수 로직에서 조금 생각이 부족했음.
그리고 동점일때의 등수 계산에 대해서 문제가 좀 있음.
1. compare 함수 로직
a 와 b를 비교해서 금,은, 동 모두 a>b 의 로직을 취함.
2. 동점인 상황에서 rank 조절
만약 동점인 생황이면 rank 는 정하지 말고 아닐 경우면 rank 올려주고 인풋 기준 충족하면 최종 ans 업데이트하고 출력
뭘 실수해서 틀렸나
compare 로직 작성, rank 계산에서 아이디어.
그래서 뭘 기억하면 되나
구조체를 이용하는 문제를 많이 풀어보는 방법밖에 없다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, k;
struct Country{
int number;
int gold;
int silver;
int bronze;
};
bool compare(Country a, Country b) {
if (a.gold != b.gold) return a.gold > b.gold;
if (a.silver != b.silver) return a.silver > b.silver;
return a.bronze > b.bronze;
}
int main(){
cin.tie(0) -> sync_with_stdio(0);
cin >> n >> k;
vector<Country> cty(n);
for (int i = 0; i < n; i++){
cin >> cty[i].number >> cty[i].gold >> cty[i].silver >> cty[i].bronze;
}
sort(cty.begin(), cty.end(), compare);
int rank = 1;
int targetRank = 0;
for (int i = 0; i < n; ++i) {
if (i > 0 && cty[i].gold == cty[i - 1].gold &&
cty[i].silver == cty[i - 1].silver &&
cty[i].bronze == cty[i - 1].bronze) {
}else{
rank = i + 1;
}
if (cty[i].number == k) {
targetRank = rank;
break;
}
}
cout << targetRank;
}