카테고리 없음

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;
}