본문 바로가기

백준/실버

[백준 11292번] 키 큰 사람 (C++)

문제링크 : https://www.acmicpc.net/problem/11292

 

11292번: 키 큰 사람

입력은 여러개의 테스트케이스로 구성되어있다. 각 테스트케이스는 첫 번째 줄에 학생의 수 N (0 < N ≤ 50)이 주어지고, 이어서 N개의 줄에 각 학생의 이름과 키가 공백으로 구별되어 주어진다.

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

bool cmp(pair<string, float>&a, pair<string, float>& b)
{
    return a.second > b. second;
}

vector<pair<string, float>>v;

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

    while(1)
    {
        v.clear();
        int T;
        cin >> T;

        if(!T) break;
        for(int i=0; i<T; i++)
        {
            string s;
            float h;
            cin >> s >> h;
            v.push_back({s, h});
        }
        sort(v.begin(), v.end(), cmp); //내림차순 정렬
        cout << v[0].first <<" ";
        for(int i=1; i<T; i++)
        {
            if(v[0].second == v[i].second) cout << v[i].first << " "; //제일 큰 값이랑 같으면 이어서 출력
            else break;
        }
        cout << "\n";
    }

    return 0;
}

큰 값부터 출력해야 하기에 내림차순으로 정렬을 해준다.

이때 들어가는 값이 문자와 숫자이기에 숫자를 기준으로 정렬해준다.

 

숫자를 기준으로 정렬하고 정렬된 문자를 출력하되, 맨 첫번째 값(제일 큰 값)이랑 같으면 이어서 출력하고 아니면 종료한다.