본문 바로가기

PS

[ 백준 / C++ ] 8979 : 올림픽

[ 문제 ]

 

 

8979번: 올림픽

입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각

www.acmicpc.net

 

[ 접근방법 ]

 

금, 은, 동메달 수 및 국가 번호를 갖는 구조체를 선언한다.

 

금, 은, 동메달 수에 따라 정렬을 해 주고 난 뒤, 국가 번호를 비교하여 원하는 국가가 몇 등인지 확인한다.

 

[ 소스코드 ]

 

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Cty
{
    int g, s, b, idx;
};

bool cmp(Cty x, Cty y)
{
    if (x.g > y.g)
        return true;
    else if (x.g == y.g)
    {
        if (x.s > y.s)
            return true;
        else if (x.s == y.s)
        {
            if (x.b > y.b)
                return true;
        }
    }
    return false;
}

int n, k, ans;
vector<Cty> v;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> k;

    v.resize(n);
    for (int i = 0; i < n; i++)
        cin >> v[i].idx >> v[i].g >> v[i].s >> v[i].b;

    sort(v.begin(), v.end(), cmp);

    for (int i = 0; i < n; i++)
    {
        if (v[i].idx == k)
        {
            ans = i;
            break;
        }
    }

    for (int i = ans - 1; i >= 0; i--)
    {
        if (v[i].g == v[ans].g && v[i].s == v[ans].s && v[i].b == v[ans].b)
            ans--;
        else
            break;
    }

    cout << ans + 1;

    return 0;
}