코드
#include <iostream>
#include <vector>
#include <cstring>
#include <map>
#include <cmath>
#include <algorithm>
#include <queue>
#include <string>
using namespace std;
typedef long long ll;
int n;
vector<pair<int,int>> res;
vector<pair<pair<int,int>, int>> v;
map<int,int> mp;
bool cmp(pair<pair<int,int>, int> a, pair<pair<int,int>, int> b) {
return a.second > b.second;
}
void FASTIO() {
ios_base::sync_with_stdio();
cin.tie(NULL);
cout.tie(NULL);
}
int main() {
FASTIO();
cin >> n;
v.resize(n);
for(int i = 0; i < n; i++) {
cin >> v[i].first.first >> v[i].first.second >> v[i].second;
}
// 등수 별로 정렬
sort(v.begin(), v.end(), cmp);
int cnt = 0; // 3명을 뽑는다
for(int i = 0; i < n; i++) {
if(cnt == 3) break;
if(mp[v[i].first.first] >= 2) continue; // 한 국가에서 3명 이상 X
mp[v[i].first.first]++;
res.push_back(make_pair(v[i].first.first, v[i].first.second));
cnt++;
}
for(pair<int,int> i : res) {
cout << i.first << " " << i.second << '\n';
}
return 0;
}
풀이
점수별로 정렬을 하고, 조건에 맞게 답을 찾아주면 된다. 한 국가에서 받을 수 있는 메달의 개수는 최대 2개이므로 이를 방지하는 코드를 추가해주면 쉽게 해결할 수 있다. 3,4개 정도의 자료는 vector에 저장하기보다는 구조체를 만들거나 pair를 이용해 저장하는 게 시간 효율상 좋다.
'백준' 카테고리의 다른 글
[백준] 20125번 쿠키의 신체 측정 C++ 코드 (0) | 2024.11.11 |
---|---|
[백준] 1205번 등수 구하기 C++ 코드 (0) | 2024.11.11 |
[백준] 28419번 더하기 C++ 코드 (0) | 2024.11.11 |
[백준] 3653번 영화 수집 C++ 코드 (2) | 2024.11.11 |
[백준] 18436번 수열과 쿼리 37 C++ 코드 (1) | 2024.11.11 |